我有一個如下所示的數據集: 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
提交
取消