返回Dataframe中具有特定值作为新列的列的列表

时间:2016-07-26 23:32:15

标签: python pandas

我有许多列,其中包含“是”或“否”的值。我希望创建一个函数,添加一个额外的列,列出特定行的列,它们等于“是”。如果它们都等于“否”,它就不会返回任何东西。

示例

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我这样做:

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

df

enter image description here