【发布时间】:2020-07-05 14:18:16
【问题描述】:
我正在使用 Python、Pandas 进行数据分析。我在不同的列中有稀疏分布的数据,如下所示
| id | col1a | col1b | col2a | col2b | col3a | col3b |
|----|-------|-------|-------|-------|-------|-------|
| 1 | 11 | 12 | NaN | NaN | NaN | NaN |
| 2 | NaN | NaN | 21 | 86 | NaN | NaN |
| 3 | 22 | 87 | NaN | NaN | NaN | NaN |
| 4 | NaN | NaN | NaN | NaN | 545 | 32 |
我想将这些分散在不同列中的数据组合成紧密排列的列,如下所示。
| id | group | cola | colb |
|----|-------|-------|-------|
| 1 | g1 | 11 | 12 |
| 2 | g2 | 21 | 86 |
| 3 | g1 | 22 | 87 |
| 4 | g3 | 545 | 32 |
我尝试做的是跟随,但不能正确地做到这一点
df['cola']=np.nan
df['colb']=np.nan
df['cola'].fillna(df.col1a,inplace=True)
df['colb'].fillna(df.col1b,inplace=True)
df['cola'].fillna(df.col2a,inplace=True)
df['colb'].fillna(df.col2b,inplace=True)
df['cola'].fillna(df.col3a,inplace=True)
df['colb'].fillna(df.col3b,inplace=True)
但我认为必须有更简洁有效的方式来做到这一点。如何以更好的方式做到这一点?
【问题讨论】:
-
如果你的数字都是正数,你可以
fillna(value=0)然后添加列。 -
请客观地解释您所说的“更好”是什么意思,否则可能会因为主要基于意见而被关闭。具体来说,考虑一下您认为当前的执行方式是不可接受的。
-
这里我将更好的定义为更简洁、更高效的代码。我也改了问题。