为了账号安全,请及时绑定邮箱和手机立即绑定

将 Columns 转换为 column+row 为 True 的行值

将 Columns 转换为 column+row 为 True 的行值

泛舟湖上清波郎朗 2022-07-05 19:39:54
我有一个如下所示的数据集:    key f1  f2  f3      f4      f50   001 A   B   True    False   False1   002 C   D   False   True    False2   003 A   D   False   True    False3   004 C   B   False   False   True我想使用 pandas 将上述内容转换为:    key f1  f2  state0   001 A   B   f31   002 C   D   f42   003 A   D   f43   004 C   B   f5简而言之,如果该列的行值为 True,那么该列标签应该成为名为 state 的列的新值。
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

一种方法是使用Dataframe.dot:


t = df.loc[:,'f3':]

df['state'] = t.dot(t.columns)

print(df.drop(t.columns, axis=1))


   key f1 f2 state

0    1  A  B    f3

1    2  C  D    f4

2    3  A  D    f4

3    4  C  B    f5

或者我们也可以使用idxmax:


df['state'] = t.idxmax(1)


查看完整回答
反对 回复 2022-07-05
?
临摹微笑

TA贡献1982条经验 获得超2个赞

我的一位同事给了我这个,它似乎完全符合预期。


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


查看完整回答
反对 回复 2022-07-05
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号