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

我有一个如下所示的数据集:


    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

我想使用 pandas 将上述内容转换为:


    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 的列的新值。


泛舟湖上清波郎朗
浏览 147回答 2
2回答

慕哥9229398

一种方法是使用Dataframe.dot:t = df.loc[:,'f3':]df['state'] = t.dot(t.columns)print(df.drop(t.columns, axis=1))   key f1 f2 state0    1  A  B    f31    2  C  D    f42    3  A  D    f43    4  C  B    f5或者我们也可以使用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  state0   001 A   B   f35   002 C   D   f46   003 A   D   f411  004 C   B   f5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python