是否有一个函数可以获取熊猫数据帧时间序列上两个值之间的差异? 详细信息:

问题描述

我在NYT covid dataset那里乱搞,每天都有每个县的合案情况。

我想找出每天之间案件的差异,因此从理论上讲,我可以获得每天新案件的数量而不是总案件数。取滚动平均值,或使用平均值/总和/等每两天进行一次重新采样就可以了。只是减去就让我头疼。

尝试过的方法:

  • @DirtiesContext
    • “ DatetimeIndexResampler”对象没有属性“ diff”

  • df.resample('2d').diff()
    • ufunc()缺少2个必需的位置参数中的1个

  • df.resample('1d').agg(np.subtract)
    • “滚动”对象没有属性“ diff”

  • df.rolling(2).diff()
    • ufunc()缺少2个必需的位置参数中的1个

样本数据:

df.rolling('2').agg(np.subtract)

enter image description here

所需的示例输出:

pd.DataFrame(data={'state':['Alabama','Alabama','Alabama'],'date':[dt.date(2020,3,13),dt.date(2020,14),15),16),17)],'covid_cases':[1.2,2.0,2.9,3.6,3.9]
              })

enter image description here

从原始NYT数据集重新创建示例数据:

pd.DataFrame(data={'state':['Alabama','new_covid_cases':[np.nan,0.8,0.9,0.7,0.3]
              })

任何帮助将不胜感激!我想学习如何手动/通过函数执行此操作,而不是查找“新案例”数据集,因为我将在不久的将来处理大量时间序列。

解决方法

让我们尝试以下完整的代码:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv')

df['date'] = pd.to_datetime(df['date'])

df_daily_state = df.groupby(['date','state'])['cases'].sum().unstack()

daily_new_cases_AL = df_daily_state.diff()['Alabama']

ax = daily_new_cases_AL.iloc[-30:].plot.bar(title='Last 30 days Alabama New Cases')

输出:

enter image description here

详细信息:

  • 使用以下命令从NYTimes github下载历史案例记录 原始网址
  • 将“日期”列的dtype转换为datetime dtype
  • Groupby的“日期”和“状态”列对“案例”求和,并堆叠状态 索引级别,以获取行的日期和列的状态。
  • 按列进行差异,仅选择阿拉巴马州列
  • 绘制最近30天
,

diff功能正确,但是如果您查看错误消息:

'DatetimeIndexResampler' object has no attribute 'diff'

在您的第一个尝试方法中,这是因为diff是适用于DataFrames的功能,而不适用于Resamplers,因此请通过指定要如何对其重采样将其转换回DataFrame。

如果您每天都有COVID案件的总数,并且希望将其重新采样到2天,则您可能只希望保留两天内的最新更新,在这种情况下,应该使用df.resample('2d').last().diff()之类的东西工作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...