反转 pandas 中的 get_dummies 编码

新手上路,请多包涵

列名是:ID、1、2、3、4、5、6、7、8、9。

col 值为 0 或 1

我的数据框如下所示:

  ID     1    2    3    4    5    6   7   8   9

1002    0    1    0    1    0    0   0   0   0
1003    0    0    0    0    0    0   0   0   0
1004    1    1    0    0    0    0   0   0   0
1005    0    0    0    0    1    0   0   0   0
1006    0    0    0    0    0    1   0   0   0
1007    1    0    1    0    0    0   0   0   0
1000    0    0    0    0    0    0   0   0   0
1009    0    0    1    0    0    0   1   0   0

我想要 ID 前面的列名,其中一行中的值为 1。

我想要的数据框应该是这样的:

  ID      Col2
1002       2    // has 1 at Col(2) and Col(4)
1002       4
1004       1    // has 1 at col(1) and col(2)
1004       2
1005       5    // has 1 at col(5)
1006       6    // has 1 at col(6)
1007       1    // has 1 at col(1) and col(3)
1007       3
1009       3    // has 1 at col(3) and col(7)
1009       7

请帮助我,在此先感谢

原文由 MukundS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 454
2 个回答

set_index + stack , stack 默认会dropna

 df.set_index('ID',inplace=True)

df[df==1].stack().reset_index().drop(0, axis=1)
Out[363]:
     ID level_1
0  1002       2
1  1002       4
2  1004       1
3  1004       2
4  1005       5
5  1006       6
6  1007       1
7  1007       3
8  1009       3
9  1009       7

原文由 BENY 发布,翻译遵循 CC BY-SA 4.0 许可协议

漂亮的单线:)

 new_df = df.idxmax(axis=1)

原文由 Zeel B Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题