我有一个如下所示的数据集: 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)
临摹微笑
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
添加回答
举报
0/150
提交
取消
