我有一个表如下列名:熊猫:串联取决于价值
a b c d e
r1 0 1 0 1 0
r2 1 1 0 0 0
我想创建一个F列是列名的串联仅当行有1
值So [r1,f] = bd and [r2,f] = ab
有没有人有一个想法,如何做到这一点熊猫?将不胜感激任何帮助!
我有一个表如下列名:熊猫:串联取决于价值
a b c d e
r1 0 1 0 1 0
r2 1 1 0 0 0
我想创建一个F列是列名的串联仅当行有1
值So [r1,f] = bd and [r2,f] = ab
有没有人有一个想法,如何做到这一点熊猫?将不胜感激任何帮助!
您可以通过df
通过mul
使用多个列的名称,然后sum
- 但在df
是被转换到True
S和False
小号0
和1
值:
df['f'] = df.mul(df.columns.values).sum(axis=1)
print (df)
a b c d e f
r1 0 1 0 1 0 bd
r2 1 1 0 0 0 ab
通用的解决方案(如果有更多的可能值作为0
,1
):
加eq
与1
比较:
df['f'] = df.eq(1).mul(df.columns.values).sum(axis=1)
print (df)
a b c d e f
r1 0 1 0 1 0 bd
r2 1 1 0 0 0 ab
解dot
和eq
:
df['f'] = df.eq(1).dot(df.columns.values)
print (df)
a b c d e f
r1 0 1 0 1 0 bd
r2 1 1 0 0 0 ab
与apply
另一种解决方案是slowier:
df['f'] = df.apply(lambda x: ''.join(x.index[x == 1]), axis=1)
print (df)
a b c d e f
r1 0 1 0 1 0 bd
r2 1 1 0 0 0 ab
编辑:
对于添加空间是可能的用途:
df['f'] = df['f'].apply(lambda x: ' '.join(list(x)))
print (df)
a b c d e f
r1 0 1 0 1 0 b d
r2 1 1 0 0 0 a b
数据帧中只有“0”和“1”的值,还是不是? – jezrael