我有一个格式如下的数据集:
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 |
我不在乎柱子的名字.
我有一个格式如下的数据集:
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)
.
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