簡體   English   中英

基於列標題的 Pandas Dataframe 總和行

[英]Pandas Dataframe sum row based on column header

我有以下數據框並希望創建兩列,一列將顯示 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' 的數字總和)

您可以嘗試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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM