Python 如果行值=1,如何从Dataframe生成列名列表
我有一个熊猫数据框,格式如下Python 如果行值=1,如何从Dataframe生成列名列表,python,pandas,Python,Pandas,我有一个熊猫数据框,格式如下 CLASS 1 CLASS 2 CLASS 3 CLASS 4 CLASS 5 CLASS 6 CLASS 7 CLASS 8 CLASS 9 CLASS 10 CLASS 11 CLASS 12 CLASS 13 CLASS 14 CLASS 15 CLASS 16 CLASS 17 CLASS E CLASS V 0 0 0 1 0 0 0 1 0 0 0 0 0 0
CLASS 1 CLASS 2 CLASS 3 CLASS 4 CLASS 5 CLASS 6 CLASS 7 CLASS 8 CLASS 9 CLASS 10 CLASS 11 CLASS 12 CLASS 13 CLASS 14 CLASS 15 CLASS 16 CLASS 17 CLASS E CLASS V
0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 1
2 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0
3 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0
4 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8944 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1
8945 1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 1 1 1 1
8946 0 0 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1
8947 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
8948 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0
我想为每一行获取一个列表,这样列表就包含了行中的列的名称
例如,对于数据中的第一行,我希望返回列表作为
['CLASS 3'、'CLASS 7']
对于第二行,['3级'、'6级'、'7级'、'8级'、'16级'、'V级]
提前感谢。如果有一级多指标,请使用:
print (df.columns)
MultiIndex([( 'CLASS 1',),
( 'CLASS 2',),
( 'CLASS 3',),
( 'CLASS 4',),
( 'CLASS 5',),
( 'CLASS 6',),
( 'CLASS 7',),
( 'CLASS 8',),
( 'CLASS 9',),
('CLASS 10',),
('CLASS 11',),
('CLASS 12',),
('CLASS 13',),
('CLASS 14',),
('CLASS 15',),
('CLASS 16',),
('CLASS 17',),
( 'CLASS E',),
( 'CLASS V',)],
)
df.columns = df.columns.get_level_values(0)
如果与和一起使用的数据中只有1
和0
值:
或按行筛选:
df['new'] = df.apply(lambda x: x.index[x == 1].tolist(), axis=1)
或根据、fitler by和last create<代码>列表重新塑造每个组:
df['new'] = (df.stack()
.reset_index(name='val')
.query('val == 1')
.groupby('level_0')['level_1']
.apply(list))
伟大的耶斯雷尔答道。谢谢你的回复。但是,我得到了以下输出0[(3类,),(7类,)]1[(3类,),(6类,),(7类,),(8类,…2[(3类,),(5类,),(7类,),(9类,)]3[(2类,),(3类,),(7类,),(3类,),(8类,)]4[(3类,),(7类,),(5类,)。我需要这样的东西,['CLASS 3'、'CLASS 7']等等。@AdityaVartak-Waht在我的解决方案之前是
print(df.columns)
?我不明白你的意思question@AdityaVartak-能否测试打印(测向列)
过去的输出有问题吗?因为似乎存在多索引,但不确定我的意思是我不需要多索引列,因此如何删除它们。
df['new'] = (df.stack()
.reset_index(name='val')
.query('val == 1')
.groupby('level_0')['level_1']
.apply(list))