如何計算基於連續天數和其他兩列的值的總和

魯茲貝·塔萊比

如何僅對連續天數、同名同名供應商進行求和?例如,對於 A 和供應商 Wal,我需要對 2021-05-31 和 2021-06-01 進行求和,然後再對 2021-06-08 和 2021-06-09 進行求和。我需要添加一個新列進行求和。請看下面的例子:

在此處輸入圖片說明

這是該表的 Pandas DataFrame 代碼:

df = pd.DataFrame({'Name': ['A', 'A', 'A','A','B','B','C','C','C','C','C','C','C','C','C'],
  'Supplier': ['Wal', 'Wal', 'Wal', 'Wal', 'Co', 'Co', 'Mc', 'Mc', 'St', 'St', 'St', 'St', 'St', 'To', 'To'],
  'Date': ['2021-05-31', '2021-06-01', '2021-06-08', '2021-06-09', '2021-05-17', '2021-05-18'
          , '2021-04-07', '2021-04-08', '2021-05-11', '2021-05-12', '2021-05-13', '2021-05-18'
          , '2021-05-19', '2021-03-30', '2021-03-31'],
  'Amount': [27, 400, 410, 250, 100, 50, 22, 78, 60, 180, 100, 240, 140, 30, 110],
  'Summation': [427,427,660,660,150,150,100,100,340,340,340,380,380,140,140 ]})
威廉

像這樣?

import pandas as pd

df = pd.DataFrame({'Name': ['A', 'A', 'A','A','B','B','C','C','C','C','C','C','C','C','C'],
  'Supplier': ['Wal', 'Wal', 'Wal', 'Wal', 'Co', 'Co', 'Mc', 'Mc', 'St', 'St', 'St', 'St', 'St', 'To', 'To'],
  'Date': ['2021-05-31', '2021-06-01', '2021-06-08', '2021-06-09', '2021-05-17', '2021-05-18'
          , '2021-04-07', '2021-04-08', '2021-05-11', '2021-05-12', '2021-05-13', '2021-05-18'
          , '2021-05-19', '2021-03-30', '2021-03-31'],
  'Amount': [27, 400, 410, 250, 100, 50, 22, 78, 60, 180, 100, 240, 140, 30, 110]})

df['Date'] = pd.to_datetime(df['Date'])
filt = df.loc[((df['Date'] - df['Date'].shift(-1)).abs() == pd.Timedelta('1d')) | (df['Date'].diff() == pd.Timedelta('1d'))]
breaks = filt['Date'].diff() != pd.Timedelta('1d')
df['Summation'] = df.groupby(['Name','Supplier',breaks.cumsum()])['Amount'].transform('sum')

print(df)

輸出:

   Name Supplier       Date  Amount  Summation
0     A      Wal 2021-05-31      27        427
1     A      Wal 2021-06-01     400        427
2     A      Wal 2021-06-08     410        660
3     A      Wal 2021-06-09     250        660
4     B       Co 2021-05-17     100        150
5     B       Co 2021-05-18      50        150
6     C       Mc 2021-04-07      22        100
7     C       Mc 2021-04-08      78        100
8     C       St 2021-05-11      60        340
9     C       St 2021-05-12     180        340
10    C       St 2021-05-13     100        340
11    C       St 2021-05-18     240        380
12    C       St 2021-05-19     140        380
13    C       To 2021-03-30      30        140
14    C       To 2021-03-31     110        140

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python高效/簡單的方法來計算兩個值數組的總和?

如何通過同一個表中的其他列進行匯總和其他計算?

如何計算“stepfun”類的兩個步驟函數(R-stepfun)的總和?

如何修改 apply 和 lambda 函數以基於 Python Pandas 中的其他函數創建新列?

數值計算總和的正確方法

基於日期的總和值

基於連續參數python的返回值

Pandas:總結基於其他列的列

比較兩個循環中的值並在 XSLT 中計算總和

如何計算連續兩行的條目並僅在新數據框中保留第二行?

如何計算tidyverse中前N個值的總和占總和的比例

如何組合和總結後續值,直到列中的新值

SQL - 計數和 if/else 取決於列值

R 通過唯一列 PAIRS(BA 和 AB)計算值的總和,同時保留兩對

計算列 C 的總和

重新計算列的 PySpark 總和?

計算其他兩個列值之間(範圍)的列值

使用分區計算連續值 - 間隙和島嶼?

一列中最大值的總和,加上另一列中其他值的總和

如何在php循環中分別計算總數字/數字,奇數和偶數

計算來自文件threeds的數字總和

如何使用 R 中連續 id 計數的開始和結束時間戳合併行,但以每組為基礎?

Python:如何計算 csv 上的浮點數總和

Pyspark udf 用於填充基於其他兩列的列

如何考慮其他列組計算兩組之間的差異

如何根據其他兩列計算重複項的平均值

根據其他列計算唯一值的計數

基於條件的總和聚合

PySpark:GroupBy 併計算列的唯一值的總和