Python 3.x 在Dataframe中添加新列,并根据条件将行值更新为其他列名称
我有一个数据帧,列为a、c1、c2、c3和c4Python 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
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