我有以下資料框并希望創建兩列,一列將顯示 MTD 金額,另一列將根據每個帳戶名稱的日期引數顯示累計 YTD。這很容易在 Excel 中使用 =SUMIFS 公式實作,并且想知道 Python 等價物。
--------------- ------------ ------------ ------------ ------------
| Account Names | 31/01/2022 | 28/02/2022 | 31/03/2022 | 30/04/2022 |
--------------- ------------ ------------ ------------ ------------
| Cash At Bank | 100 | 150 | 100 | 150 |
| Debtors | 50 | 50 | 50 | 100 |
| Inventory | 250 | 250 | 350 | 100 |
| PAYG Withheld | 50 | 50 | 10 | 150 |
--------------- ------------ ------------ ------------ ------------
理想情況下,我希望它盡可能高效,即不需要回圈。我嘗試使用 np.select 進行此操作,因為我讀過這是最快的方法之一,但沒有運氣。我收到以下錯誤:
ValueError:形狀不匹配:無法將物件廣播到單個形狀
EndDate = '31/03/2022'
Budget_Assets["MTD_Amount"] = np.select(condlist=[Budget_Assets.columns == EndDate],choicelist=[Budget_Assets[EndDate]],default=0)
例如,銀行現金的 MTD_Amount 列中的值應為 100,而 YTD_Column 將為 350(從 '31/01/2022' 到 '31/03/2022' 的數字總和)
uj5u.com熱心網友回復:
您可以嘗試sum(axis=1)通過切割日期時間之類的列來計算YTD并僅用于loc獲取MTD
EndDate = '31/03/2022'
date_cols = df.filter(regex='\d{2}/\d{2}/\d{4}')
date_cols.columns = pd.to_datetime(date_cols.columns, dayfirst=True)
df['YTD_Column'] = date_cols.loc[:, :pd.to_datetime(EndDate, dayfirst=True)].sum(axis=1)
df['MTD_Column'] = df[EndDate]
Account Names 31/01/2022 28/02/2022 31/03/2022 30/04/2022 YTD_Column MTD_Column
0 Cash At Bank 100 150 100 150 350 100
1 Debtors 50 50 50 100 150 50
2 Inventory 250 250 350 100 850 350
3 PAYG Withheld 50 50 10 150 110 10
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479475.html
