【发布时间】:2020-09-05 07:24:33
【问题描述】:
我希望能够计算菲律宾每个城市的 Covid-19 病例增长率。我正在使用卫生部的公共病例数据集,其中包含病例 ID、病例确认日期、病例所在城市等。
我尝试使用 groupby 方法将数据拆分为城市和日期,计算每天的病例数,计算这些计数的累积总和,计算每日百分比变化,最后计算过去 14 天的百分比变化平均值。
我能够做到这些,但我不知道如何将它们再次组合到包含城市及其过去 14 天平均增长率的数据集。
这是我目前所拥有的:
import pandas as pd
cases_df = pd.read_csv('https://storage.googleapis.com/doh_datadrops/DOH%20Data%20Drop%2020200518.csv',
parse_dates=[5,6,7,9,17])
#cast data to appropriate types for easy handling
for col in ['AgeGroup', 'Sex','RemovalType', 'Admitted', 'RegionRes','ProvRes','CityMunRes',
'CityMuniPSGC','HealthStatus','Quarantined','Pregnanttab']:
cases_df[col] = cases_df[col].astype('category')
for col in ['DateRepConf', 'DateDied', 'DateRecover', 'DateRepRem','DateOnset']:
cases_df[col] = cases_df[col].astype('datetime64')
cases_df.Age = cases_df.Age.astype('Int64')
list_cases_by_city_by_date = cases_df.groupby(['CityMunRes','DateRepConf'])['CaseCode'].count().cumsum().pct_change()
最后一个 groupby 产生一个多索引列表:
CityMunRes DateRepConf
ABUCAY 2020-01-30 NaN
2020-02-03 NaN
2020-02-05 NaN
2020-03-06 NaN
2020-03-07 NaN
...
ZARRAGA 2020-05-14 0.0
2020-05-15 0.0
2020-05-16 0.0
2020-05-17 0.0
2020-05-18 0.0
Name: CaseCode, Length: 28336, dtype: float64
如果我指定城市,现在我可以使用以下代码计算过去 14 天的增长率:
list_cases_by_city_by_date.loc['ABUCAY'].tail(14).mean()
0.03571428571428571
但我想要一个简单的数据框,其中包含“CityMunRes”和“Ave_Growth”作为列,如下所示:
| | City | Ave_Growth |
|---|--------|------------|
| 0 | ABUCAY | 0.03 |
| 1 | Bxxxx | 0.02 |
| 2 | Cxxxx | 0.50 |
| | ... | |
| n | Zxxx | 0.2 |
但我遇到了初学者的障碍。我确信解决方案非常简单。 :)
请帮忙
谢谢。
【问题讨论】:
标签: python pandas pandas-groupby