Python 将列转换为行值,其中列+;这是真的
我有一个数据集,如下所示:Python 将列转换为行值,其中列+;这是真的,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我有一个数据集,如下所示: key f1 f2 f3 f4 f5 0 001 A B True False False 1 002 C D False True False 2 003 A D False True False 3 004 C B False False True 我想用熊猫来将上述内容转换为: key f1 f2 state 0 001 A
key f1 f2 f3 f4 f5
0 001 A B True False False
1 002 C D False True False
2 003 A D False True False
3 004 C B False False True
我想用熊猫来将上述内容转换为:
key f1 f2 state
0 001 A B f3
1 002 C D f4
2 003 A D f4
3 004 C B f5
简而言之,如果列的行值为True,则该列标签应成为名为state的列的新值。一种方法是使用:
或者我们也可以使用
idxmax
:
df['state'] = t.idxmax(1)
我的一位同事给了我这个,它似乎完全符合我的要求
pd.melt(df, id_vars=['key', 'f1', 'f2'],
var_name = 'state')
.query('value')
.drop('value', axis=1)
输出:
key f1 f2 state
0 001 A B f3
5 002 C D f4
6 003 A D f4
11 004 C B f5
我得到了很多关于使用pd.melt的反馈;然而,我最接近的方法是df.melt(id_vars['key','f1','f2'],value_name='state')。这种方法重复所有行,创建一个新的列变量,并基本上将True | False置于状态下。这不是我想要的,尽管我可以使用False删除行。
pd.melt(df, id_vars=['key', 'f1', 'f2'],
var_name = 'state')
.query('value')
.drop('value', axis=1)
key f1 f2 state
0 001 A B f3
5 002 C D f4
6 003 A D f4
11 004 C B f5