如何在熊猫中具有特定条件的列名放入数据框单元格

时间:2018-08-09 03:58:10

标签: python pandas dataframe data-analysis

我有一个这样的数据框:

         ADR     WD      EF    INF    SSI   DI
0        1.0    NaN     NaN    NaN    NaN  NaN
1        NaN    NaN     1      1      NaN  NaN
2        NaN    NaN     NaN    NaN    1    NaN
3        NaN    1       1      1      NaN  NaN
4        NaN    1.0     NaN    NaN    NaN  NaN

我希望结果是这样的:

[["ADR"],["EF","INF"],["SSI"],["WD","EF","INF"],["WD"]]

如您所见,如果该列中有1,则该列的名称已被替换。并且所有内容都放在另一个数组中。

我看过这篇文章link,但由于名称已经发生了静态变化,所以对我没有帮助。

谢谢:)

3 个答案:

答案 0 :(得分:5)

IIUC dot

df.notnull().dot(df.columns+',').str[:-1].str.split(',').tolist()
Out[753]: [['ADR'], ['EF', 'INF'], ['SSI'], ['WD', 'EF', 'INF'], ['WD']]

答案 1 :(得分:4)

使用:

df1 = df.stack().reset_index()
df1.columns = ['a','b','c']
df1 = df1[df1['c'] == 1]

a = df1.groupby('a')['b'].apply(list).tolist()
print (a)
[['ADR'], ['EF', 'INF'], ['SSI'], ['WD', 'EF', 'INF'], ['WD']]

答案 2 :(得分:3)

选项1
replace stack groupby

df.replace(1.0, df.columns.to_series()).stack().groupby(level=0).apply(list).tolist()

选项2
apply

df.apply(lambda x: list(x[x.notnull()].index), 1).values.tolist()

两种产品:

[['ADR'], ['EF', 'INF'], ['SSI'], ['WD', 'EF', 'INF'], ['WD']]