如何根据条件用列名替换pandas数据框中的值?

sam*_*and 9 python dataframe pandas

我有一个看起来像这样的数据框:

在此输入图像描述

我想将A:D范围内的所有1替换为列的名称,以便最终结果类似于:

在此输入图像描述

我怎样才能做到这一点?

您可以使用以下方法重新创建我的数据框:

dfz = pd.DataFrame({'A' : [1,0,0,1,0,0],
                    'B' : [1,0,0,1,0,1],
                    'C' : [1,0,0,1,3,1],
                    'D' : [1,0,0,1,0,0],
                    'E' : [22.0,15.0,None,10.,None,557.0]})
Run Code Online (Sandbox Code Playgroud)

Ale*_*ley 12

一种方法是使用replace系列映射列标签并将其传递给值(在这种情况下,相同的标签):

>>> dfz.loc[:, 'A':'D'].replace(1, pd.Series(dfz.columns, dfz.columns))
   A  B  C  D
0  A  B  C  D
1  0  0  0  0
2  0  0  0  0
3  A  B  C  D
4  0  0  3  0
5  0  B  C  0
Run Code Online (Sandbox Code Playgroud)

要使更改成为永久更改,您需要将返回的DataFrame分配回dfz.loc[:, 'A':'D'].

除了解决方案之外,记住在列中混合数字和字符串类型时可能会失去很多性能优势是有用的,因为pandas被迫使用通用的"object"dtype来保存值.


小智 10

解决方案使用where

>>> dfz.where(dfz != 1, dfz.columns.to_series(), axis=1)
   A  B  C  D      E
0  A  B  C  D   22.0
1  0  0  0  0   15.0
2  0  0  0  0    NaN
3  A  B  C  D   10.0
4  0  0  3  0    NaN
5  0  B  C  0  557.0
Run Code Online (Sandbox Code Playgroud)