【发布时间】:2022-11-24 18:04:05
【问题描述】:
我有一个格式如下的数据集:
| 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
【讨论】: