2016-07-26 111 views
2

我有许多列中值为“是”或“否”的列。我希望创建一个函数,添加一个额外的列,列出等于“是”的特定行的列。如果他们都等于“不”,那么它什么都不会返回。返回Dataframe中具有特定值作为新列的列的列表

Column 1 Column 2 Column 3 Column 4 Column 5 New Column 
Yes  No  No  Yes  No  Column 1, Column 4 

回答

1

假设所有列名都是字符串:

df['New Column'] = df.apply(lambda row: ', '.join(row.index[row == 'Yes']), axis=1) 

如果你有非字符串列名(例如一个整数),你可以基本上做同样的事情,但是先将字符串转换为字符串:

df['New Column'] = df.apply(lambda row: ', '.join(row.index.astype(str)[row == 'Yes']), axis=1) 

对于每一行,我使用布尔索引行索引(即列)只能选择'Yes'的位置。然后,我只是在所有'Yes'列名称上进行字符串连接。

样本输出(有两个额外的样本行):

Column 1 Column 2 Column 3 Column 4 Column 5   New Column 
0  Yes  No  No  Yes  No Column 1, Column 4 
1  No  No  No  No  No      
2  No  Yes  No  No  No   Column 2 
+0

感谢根!这解决了它,并允许所有“否”的行留空。 – Oronic

0

我应该这样做:

df['New'] = df.apply(lambda x: df.columns[x == 'Yes'].tolist(), axis=1) 

df 

enter image description here

相关问题