【发布时间】:2020-03-28 09:18:34
【问题描述】:
我有一个如下的数据框:
df = pd.DataFrame([['2019-01-01',2,5],['2019-01-02',15,8],['2019-01-03',1,9],['2019-01-04',10,20],['2019-01-05',5,15]],columns = ['date','data1','data2'])
date data1 data2
0 2019-01-01 2 5
1 2019-01-02 15 8
2 2019-01-03 1 9
3 2019-01-04 10 20
4 2019-01-05 5 15
我想计算每两天的滚动平均值并将结果放入新的数据框中。例如,对于日期 2019-01-01 和 2019-01-02,data1 的平均值为 8.5,data2 的平均值为 6.5,那么对于日期 2019-01-02 和 2019-01-03,数据的平均值1 为 8,data2 为 8.5。我的原始数据框比这个大,所以我不想一个一个地做这个,我更喜欢创建循环或者如果可能的话矢量化。我的目标是获得以下数据框
date data1 data2
0 2019-01-02 8.5 6.5
1 2019-01-03 8.0 8.5
2 2019-01-04 5.5 14.5
3 2019-01-05 7.5 17.5
我的尝试:
def my_attempt(df):
result = []
start_date = datetime.datetime.strptime('2019-01-01','%Y-%m-%d')
start_date = start_date.date()
for i in range(5):
df1 = df.loc[df['date'].isin([str(start_date + datetime.timedelta(days = i)),str(start_date + datetime.timedelta(days = i) + datetime.timedelta(days = 1))])]
df1_mean = df1.mean()
result += df1_mean
return result
这不起作用,因为 df1.mean() 会给出与我想要获得的格式不同的格式,并且无法使用 result+=df1_mean 来堆叠结果。
【问题讨论】:
-
rolling可能就是你要找的东西 -
这能回答你的问题吗? Rolling Mean on pandas on a specific column
-
df.rolling(2).mean()或df[['date']].join(df.rolling(2).mean()).iloc[1:] -
你为什么不使用 Pandas 的日期相关功能?!
标签: python pandas for-loop statistics rolling-computation