Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列转换为行值,其中列+;这是真的_Python_Python 3.x_Pandas_Numpy - Fatal编程技术网

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