Python:如何用相应的列名填充非空行?

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

以下是原始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    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