【问题标题】:How to inverse cumulative sum in Pandas如何在 Pandas 中反转累积和
【发布时间】:2021-12-06 16:10:30
【问题描述】:

我有一个相当简单的问题,我似乎找不到任何解决方案。我在网上查看了许多类似的问题,但他们的解决方案不适用于我的情况。

我有一个如下格式的熊猫数据集

        CountryCode  ConfirmedCases  ConfirmedDeaths        date
   335         ABW          4872.0             45.0  2020-12-01
   336         ABW          4902.0             45.0  2020-12-02
   337         ABW          4923.0             45.0  2020-12-03
   338         ABW          4942.0             45.0  2020-12-04
   339         ABW          4957.0             45.0  2020-12-05

ConfirmedCases 和 ConfirmedDeaths 都是按 CountryCode 衡量的累积总和,但我需要 CountryCode 的每日病例和每日死亡人数。这要求我计算我的数据集中每个国家在时间 t 和时间 t-1 的确诊病例之间的差异——即同一国家今天和前一天的病例数之差。理想情况下,我想要一个解决方案,允许我将国家/地区的每日病例数和每日死亡人数登记为数据集中的两个新变量。因此,我想要如下所示的内容:

        CountryCode  ConfirmedCases  ConfirmedDeaths        date    DailyCases    Daily Deaths
   335         ABW          4872.0             45.0  2020-12-01     15            0
   336         ABW          4902.0             45.0  2020-12-02     30            0
   337         ABW          4923.0             45.0  2020-12-03     21            0
   338         ABW          4942.0             45.0  2020-12-04     19            0
   339         ABW          4957.0             45.0  2020-12-05     15            0

提前感谢您的帮助!

【问题讨论】:

  • df.groupby('CountryCode').diff()...

标签: python python-3.x pandas sum


【解决方案1】:

Quang Hoang 的解决方案是正确的,只是您应该将 NaN 值替换为每个国家/地区的初始值:

df['DailyCases'] = df.groupby('CountryCode')['ConfirmedCases'].diff()
df['DailyCases'] = df['DailyCases'].fillna(df['ConfirmedCases'])

【讨论】:

  • 非常感谢!考虑到我的数据集是一个面板(多个国家/地区近一年的日常观察),是否有必要按国家/地区代码和日期分组?
  • 不,如果您按国家和日期分组,您的每个组中将只有一行,因此不会有任何内容可以减少。相反,如果您的每个组包含不同日期的病例和死亡值,您将能够正确计算每个国家/地区的差异。试试看吧:)
猜你喜欢
  • 2018-02-28
  • 2019-02-15
  • 2019-10-29
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2017-05-16
  • 1970-01-01
相关资源
最近更新 更多