在Dataframe中添加新列,并根据条件将行值更新为其他列名

时间:2020-04-26 10:03:21

标签: python-3.x pandas dataframe

我有一个数据帧,其列为a,c1,c2,c3 c4。

df = 
a.   c1.  c2.  c3.  c4.
P1   1    0    0    0
P2   0    0    0    1
P3   1    0    0    0
P4   0    1    0    0

在df上方,我要执行以下操作: 添加一个新的列main,其值将是包含特定行的值1的列的名称。 例如:第一行的主列中的值将为'c1',第二行也将具有c4。

生成的df如下所示:

df = 
    a.   c1.  c2.  c3.  c4. main
    P1   1    0    0    0   c1
    P2   0    0    0    1   c4
    P3   1    0    0    0   c1
    P4   0    1    0    0   c2

我是python和dataframe的新手。请帮忙。

1 个答案:

答案 0 :(得分:2)

使用DataFrame.dot进行矩阵乘法:

如果a是第一个列,则通过索引将其忽略:

df['main'] = df.iloc[:, 1:].dot(df.columns[1:])
#if possible multiple 1 per row
#df['main'] = df.iloc[:, 1:].dot(df.columns[1:] + ',').str.rstrip(',')
print (df)
    a  c1  c2  c3  c4 main
0  P1   1   0   0   0   c1
1  P2   0   0   0   1   c4
2  P3   1   0   0   0   c1
3  P4   0   1   0   0   c2

如果a是索引:

df['main'] = df.dot(df.columns)
#if possible multiple 1 per row
#df['main'] = df.dot(df.columns + ',').str.rstrip(',')
print (df)
    c1  c2  c3  c4 main
a                      
P1   1   0   0   0   c1
P2   0   0   0   1   c4
P3   1   0   0   0   c1
P4   0   1   0   0   c2