我有一个格式如下的数据集:

sha 0_x 1_x N_x
Sha1 rm rm
Sha2 rw rw
Sha3 rw
Sha4 tr

特别是,该数据集当前包含约2000列.

我希望减少删除尽可能多的空行的列数,如下所示:

sha 0_x 1_x
Sha1 rm rm
Sha2 rw rw
Sha3 rw
Sha4 tr

我不在乎柱子的名字.

推荐答案

假设空单元格为NaN,如果不是,则为第一个replace('', np.nan).

您可以使用stackpivot:

cols = df.columns[1:]
# ['0_x', '1_x', 'N_x']

(df.set_index('sha')
   .stack()
   .reset_index()
   .assign(cols=lambda d: d.groupby('sha')
                           .cumcount()
                           .map(dict(enumerate(cols)))
          )
   .pivot(index='sha', columns='cols', values=0)
   .reset_index()
)

其他选项,apply:

cols = list(df.columns[1:])
# ['0_x', '1_x', 'N_x']

(df.set_index('sha')
   .apply(lambda s: s.dropna().reset_index(drop=True), axis=1)
   .pipe(lambda d: d.set_axis(cols[:len(d.columns)], axis=1))
   .reset_index()
)

输出:

cols   sha 0_x  1_x
0     Sha1  rm   rm
1     Sha2  rw   rw
2     Sha3  rw  NaN
3     Sha4  tr  NaN

Python相关问答推荐

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

为什么这个带有List输入的简单numba函数这么慢

如何在polars(pythonapi)中解构嵌套 struct ?

如何在虚拟Python环境中运行Python程序?

C#使用程序从Python中执行Exec文件

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

从groupby执行计算后创建新的子框架

我如何使法国在 map 中完全透明的代码?

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

实现自定义QWidgets作为QTimeEdit的弹出窗口

Asyncio:如何从子进程中读取stdout?

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

Gekko中基于时间的间隔约束

使用SeleniumBase保存和加载Cookie时出现问题

如何在信号的FFT中获得正确的频率幅值

Scipy差分进化:如何传递矩阵作为参数进行优化?

将Pandas DataFrame中的列名的长文本打断/换行为_STRING输出?

根据边界点的属性将图划分为子图

Django查询集-排除True值

极地数据帧:ROLING_SUM向前看