创建用标题替换为1的数组,并为每行跳过零

时间:2017-01-24 13:08:14

标签: python pandas numpy dataframe

     a  b  c
     1  1  0
     0  0  1
     1  0  1

其中a,b和c是标题

我有上面显示的数据框,我需要以下格式的结果:

      [[a,b],
       [c],
       [a,c]]

如您所见,标题值为1,标题值为0(零)将被跳过。

2 个答案:

答案 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']]

希望有所帮助