繁体   English   中英

通过取 7 天的平均值将每日数据转换为每周数据

[英]Convert daily data to weekly by taking average of the 7 days

我根据 CDC 链接上提供的数据创建了以下数据帧。

googledata = pd.read_csv('/content/data_table_for_daily_case_trends__the_united_states.csv', header=2) 
# Inspect data
googledata.head()
ID State 日期 新案例
0 美国 2022 年 10 月 2 日 11553
1个 美国 2022 年 10 月 1 日 8024
2个 美国 2022 年 9 月 30 日 46383
3个 美国 2022 年 9 月 29 日 89873
4个 美国 2022 年 9 月 28 日 63763

在将日期列转换为日期时间并通过实施掩码操作修剪最近 1 年的数据后,我得到了最近 1 年的数据:

googledata['Date'] = pd.to_datetime(googledata['Date'])

df = googledata
start_date = '2021-10-1'
end_date = '2022-10-1'
mask = (df['Date'] > start_date) & (df['Date'] <= end_date)
  
df = df.loc[mask]

但问题是我以天为单位获取数据,但我希望以周为单位转换这些数据; 即,将 365 行转换为 52 行,对应于周数据,取 1 周数据中 7 天的New cases的平均值。

我尝试实现以下方法,如上一篇文章所示: 链接我认为我什至没有正确应用它! 因为这段代码不是要我把我的 dataframe 放在任何地方!

logic = {'New Cases'  : 'mean'}

offset = pd.offsets.timedelta(days=-6)

f = pd.read_clipboard(parse_dates=['Date'], index_col=['Date'])
f.resample('W', loffset=offset).apply(logic)

但我收到以下错误:

AttributeError:模块“pandas.tseries.offsets”没有属性“timedelta”

如果我知道你想重新取样

df = df.set_index("Date")
df.index = df.index - pd.tseries.frequencies.to_offset("6D")
df = df.resample("W").agg({"New Cases": "mean"}).reset_index()

在应用 groupby 之前,您可以使用 strftime 将日期转换为周数

df['Week'] = df['Date'].dt.strftime('%Y-%U')
df.groupby('Week')['New Cases'].mean()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM