a b c
1 1 0
0 0 1
1 0 1
其中a,b和c是标题
我有上面显示的数据框,我需要以下格式的结果:
[[a,b],
[c],
[a,c]]
如您所见,标题值为1,标题值为0(零)将被跳过。
答案 0 :(得分:2)
这是单程
In [96]: df.astype(bool).apply(lambda x: df.columns[x.tolist()].tolist(), axis=1)
Out[96]:
0 [a, b]
1 [c]
2 [a, c]
dtype: object
对于值数组,请使用.values
In [102]: df.astype(bool).apply(lambda x: df.columns[x.tolist()].tolist(), axis=1)
...: .values
Out[102]: array([['a', 'b'], ['c'], ['a', 'c']], dtype=object)
或者,使用iterrows
In [114]: [x[x].index.tolist() for i,x in df.astype(bool).iterrows()]
Out[114]: [['a', 'b'], ['c'], ['a', 'c']]
答案 1 :(得分:0)
main_list = []
for ind in df.index:
sublist = []
for column in df.columns:
if df.loc[ind, column]:
sublist.append(column)
main_list.append(sublist)
输出:
[['a', 'b'], ['c'], ['a', 'c']]
希望有所帮助