微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我在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()之类的东西工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。