Python:如何用相应的列名填充非空行?
以下是原始df:Python:如何用相应的列名填充非空行?,python,pandas,Python,Pandas,以下是原始df: A B C 32 4 2 2 9 2 2 6 我想用列名填充包含数据的单元格。输出如下所示: A B C A C B A A C A B 谢谢 RJ我们可以做堆栈和取消堆栈 s=df.stack() s[:]=s.index.get_level_values(1) s=s.unstack() s Out[496]: A
A B C
32 4
2
2
9 2
2 6
我想用列名填充包含数据的单元格。输出如下所示:
A B C
A C
B
A
A C
A B
谢谢
RJ我们可以做
堆栈
和取消堆栈
s=df.stack()
s[:]=s.index.get_level_values(1)
s=s.unstack()
s
Out[496]:
A B C
0 A NaN C
1 NaN B NaN
2 A NaN NaN
3 A NaN C
4 A B NaN
或者,我们可以使用
.transform
和.mask
:
m = df.notna()
df = m.transform(lambda s: [s.name] * s.size).mask(~m)
另一种方法是
np。其中
,速度也非常快:
out = df.copy()
out[:] = np.where(df.notna(),df.columns,np.nan)
试试这个
df.where(df.isnull(),df.columns.tolist())
[out]
A B C
A NaN C
NaN B NaN
A NaN NaN
A NaN C
A B NaN
使用np.where几乎比其他解决方案快1.4~2倍,在1000个条目的df样本上进行检查。已投赞成票;)。
print(out)
A B C
0 A NaN C
1 NaN B NaN
2 A NaN NaN
3 A NaN C
4 A B NaN
df.where(df.isnull(),df.columns.tolist())
[out]
A B C
A NaN C
NaN B NaN
A NaN NaN
A NaN C
A B NaN