PANDAS:如何用一个热编码值交换列

jdzmm42g  于 2023-02-11  发布在  其他
关注(0)|答案(1)|浏览(115)

所以我的Pandas Dataframe 看起来像这样:

category1  category2  ...  category6  category7 
[filename                             ...                      ] 
[0.wav          5          1.0        ...        NaN        NaN] 
[1.wav          8          1.0        ...        NaN        NaN] 
[2.wav          5          1.0        ...        NaN        NaN]

我已经将filename列设置为我的索引。现在我想将这些值作为我的新列。每列中的值是从0到12的数字或NaN。我想使用从0到12的数字代替category1...7,并对这些值进行一次热编码。因此,对于文件0.wav,我想在第5列和第1列各设置一个1,其余为0。就像这样:

0          1           2        ...        5        ...        12 
[filename                                                                        ] 
[0.wav          0          1           0        ...        1        ...        0 ]
[1.wav          0          1           0        ...        0        ...        0 ] 
[2.wav          0          1           0        ...        1        ...        0 ]

我试过使用panda.get_dummies函数,并将我的值从int或float改为string,因为get_dummies函数需要一个对象而不是数字,但是我不知道如何按我想要的方式更改列。

wqsoz72f

wqsoz72f1#

您可以将get_dummiesgroupby.maxreindex一起使用:

out = (pd.get_dummies(df.stack())
         .groupby(level=0).max()
         .reindex(columns=range(13), fill_value=0)
       )

输出:

0   1   2   3   4   5   6   7   8   9  10  11  12
filename                                                    
0.wav      0   1   0   0   0   1   0   0   0   0   0   0   0
1.wav      0   1   0   0   0   0   0   0   1   0   0   0   0
2.wav      0   1   0   0   0   1   0   0   0   0   0   0   0

相关问题