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)
我不确定您是否需要 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)
归档时间: |
|
查看次数: |
9816 次 |
最近记录: |