Pandas:如何对日期范围内的列值求和

use*_*909 4 python sum date-range pandas

我试图在基于“date”列的日期范围内对 colA 的值求和,并将此滚动值存储在新列“sum_col”中,但我得到所有行的总和(= 100),而不仅仅是那些行在日期范围内。

我无法使用滚动或分组依据,因为我的日期(在实际数据中)不是连续的(有些日子丢失了)

艾米知道该怎么做吗?谢谢。

# Create data frame
df = pd.DataFrame()

# Create datetimes and data
df['date'] = pd.date_range('1/1/2018', periods=100, freq='D')
df['colA']= 1
df['colB']= 2
df['colC']= 3


StartDate = df.date-  pd.to_timedelta(5, unit='D') 
EndDate= df.date

dfx=df
dfx['StartDate'] = StartDate
dfx['EndDate'] = EndDate

dfx['sum_col']=df[(df['date'] > StartDate) & (df['date'] <= EndDate)].sum()['colA']
dfx.head(50)
Run Code Online (Sandbox Code Playgroud)

uke*_*emi 5

我不确定您是否需要 3 列分别表示 colA、colB、colC 的总和,还是需要一列对所有三列求和,但这里是如何对 colA 的值求和的示例:

dfx['colAsum'] = dfx.apply(lambda x: df.loc[(df.date >= x.StartDate) & 
                                            (df.date <= x.EndDate), 'colA'].sum(), axis=1)
Run Code Online (Sandbox Code Playgroud)

例如(与periods=10):

        date  colA  colB  colC  StartDate    EndDate  colAsum
0 2018-01-01     1     2     3 2017-12-27 2018-01-01        1
1 2018-01-02     1     2     3 2017-12-28 2018-01-02        2
2 2018-01-03     1     2     3 2017-12-29 2018-01-03        3
3 2018-01-04     1     2     3 2017-12-30 2018-01-04        4
4 2018-01-05     1     2     3 2017-12-31 2018-01-05        5
5 2018-01-06     1     2     3 2018-01-01 2018-01-06        6
6 2018-01-07     1     2     3 2018-01-02 2018-01-07        6
7 2018-01-08     1     2     3 2018-01-03 2018-01-08        6
8 2018-01-09     1     2     3 2018-01-04 2018-01-09        6
9 2018-01-10     1     2     3 2018-01-05 2018-01-10        6
Run Code Online (Sandbox Code Playgroud)