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

Python 3.x 在Dataframe中添加新列,并根据条件将行值更新为其他列名称,python-3.x,pandas,dataframe,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

我有一个数据帧,列为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和数据帧。请提供帮助。

用于矩阵乘法:

如果
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