假設我正在處理這個資料框:
| 全部的 | 退休 | 取消 | 其余的 |
|---|---|---|---|
| 100 | 10 | 20 | 70 |
| 150 | 160 | 30 | -40 |
| ... | ... | ... | ... |
在哪里
df['Remaining'] = df['Total'] - df['Retired'] - df['Cancelled']
我想要的輸出應該像以前的資料幀這樣(手動將“剩余”中的負數修改為零):
| 全部的 | 退休 | 取消 | 其余的 |
|---|---|---|---|
| 100 | 10 | 20 | 70 |
| 190 | 160 | 30 | 0 |
| ... | ... | ... | ... |
我嘗試了這些行,但它回傳錯誤。我做錯了什么?
df['Total'] = df.apply(lambda x: (x['Retired'] x['Cancelled']) if x['Remaining'] < 0 else x['Total'])
(并再次進行之前的計算以獲得最終輸出)
df['Remaining'] = df['Total'] - df['Retired'] - df['Cancelled']
uj5u.com熱心網友回復:
我試圖創建您想要的輸出示例。
df = pd.DataFrame({'Total': [100, 120, 137, 210, 111],
'Retired': [20, 90, 60, 110, 170],
'Cancelled': [70, 10, 80, 50, 0]})
df = df.assign(Remaining = df['Total'] - df['Retired'] - df['Cancelled'])
df['Remaining'] = df['Remaining'].apply(lambda x: 0 if x < 0 else x)
df['Total'] = df.apply(lambda x: x['Total'] if x['Remaining'] > 0 else x['Retired'] x['Cancelled'], axis = 1)
print(df)
uj5u.com熱心網友回復:
您需要傳遞axis=1給apply所以操作是逐行的。否則,您x是資料框的一列。
但你也可以不申請:
df['Total'] = df['Total'].where(df['Remaining'] >= 0, df['Retired'] df['Cancelled'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/488319.html
