我有以下資料框:
| 指數 | 時間丟失 | 原因1 | 原因2 | 原因 3 |
|---|---|---|---|---|
| 0 | 40 | X | 楠 | 楠 |
| 1 | 15 | 楠 | X | 楠 |
| 2 | 65 | X | 楠 | 楠 |
| 3 | 10 | 楠 | 楠 | X |
每行只有一個“X”來標識時間丟失列的原因。我正在嘗試遍歷每一行(和每一列)以確定哪一列包含“X”。然后,我想添加一個“型別”列,其中列標題的名稱對于每一行都是 True。這就是我想要的結果:
| 指數 | 時間丟失 | 原因1 | 原因2 | 原因 3 | 型別 |
|---|---|---|---|---|---|
| 0 | 40 | X | 楠 | 楠 | 原因1 |
| 1 | 15 | 楠 | X | 楠 | 原因2 |
| 2 | 65 | X | 楠 | 楠 | 原因1 |
| 3 | 10 | 楠 | 楠 | X | 原因 3 |
目前我的代碼看起來像這樣,我正在嘗試遍歷 DataFrame。但是,我不確定是否有函式或非迭代方法可以為“型別”列分配正確的值:
cols = ['Cause1', 'Cause 2', 'Cause 3']
for index, row in df.iterrows():
for col in cols:
if df.loc[index,col] =='X':
df.loc[index,'Type'] = col
continue
else:
df.loc[index,'Type'] = 'Other'
continue
我使用此代碼遇到的問題是它進行了迭代,但僅標識了 cols 串列中最后一項的行,其余的轉到“其他”。
任何幫助表示贊賞!
uj5u.com熱心網友回復:
您可以idxmax在資料的布爾陣列上使用:
df['Type'] = df.drop('Time Lost', axis=1).eq('x').idxmax(axis=1)
請注意,如果有幾個,這只會報告第一個原因
輸出:
Time Lost Cause 1 Cause 2 Cause 3 Type
0 40 x Nan Nan Cause 1
1 15 Nan x Nan Cause 2
2 65 x Nan Nan Cause 1
3 10 Nan Nan x Cause 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/424449.html
