Python 如果累计新冠病毒-19病例数为0,如何将每个日期和病例类型的所有状态归零
我收集了印度每个州的新冠病毒-19的数据。第一个日期为2020-03-10,无论案例类型如何。对于每一天,API只返回累积案例>0的一组状态。因此,我想将数据帧中的所有状态按日期和case_类型归零,因为它们还没有任何casePython 如果累计新冠病毒-19病例数为0,如何将每个日期和病例类型的所有状态归零,python,pandas,Python,Pandas,我收集了印度每个州的新冠病毒-19的数据。第一个日期为2020-03-10,无论案例类型如何。对于每一天,API只返回累积案例>0的一组状态。因此,我想将数据帧中的所有状态按日期和case_类型归零,因为它们还没有任何case Date | State | Case_Type | Cases 2020-03-10 Delhi Confirmed 4 2
Date | State | Case_Type | Cases
2020-03-10 Delhi Confirmed 4
2020-03-10 | Delhi | Deaths | 0
... ... ... ...
2020-03-26 Andaman and Nicobar Islands Confirmed 1
因此,在本例中,安达曼和尼科巴群岛有其第一个确诊病例2020-03-26,因此我想在2020-03-10->2020-03-25(病例=0)的每个日期为每个病例类型添加一行。我想为每个州和案例类型这样做
Date | State | Case_Type | Cases
2020-03-10 Delhi Confirmed 4
2020-03-10 | Delhi | Deaths | 0
... ... ... ...
2020-03-10 Andaman and Nicobar Islands Confirmed 0
2020-03-10 Andaman and Nicobar Islands Deaths 0
2020-03-11 Andaman and Nicobar Islands Confirmed 0
.... .... ....
2020-03-26 Andaman and Nicobar Islands Confirmed 1
我尝试了以下解决方案,但它没有达到我想要的效果
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')\
.groupby(['State','Case_Type'], sort=False)['Cases']\
.resample('D').asfreq().fillna(0)\
.reset_index()
df.sort_values(by=['State','Case_Type','Date'],ascending=True,inplace=True)
安达曼岛和尼科巴岛的日期未标注为2020-03-10->2020-03-26
有人知道如何正确地做吗
编辑:更改列名以使其对齐。您可以尝试使用Pivot和melt。可能不是最好的解决方案,但对于小数据集来说效果很好
import pandas as pd
from io import StringIO
data = """
Date|State|Case_Type|Cases
2020-03-10|Delhi|Confirmed|4
2020-03-10|Delhi|Deaths|0
2020-03-26|Andamanand Nicobar Islands|Confirmed|1
"""
output = io.StringIO()
df = pd.read_csv(StringIO(data), sep = "|")
df1 = pd.pivot_table(df, values = 'Cases', index=['State', 'Case_Type'], columns = 'Date').reset_index().fillna(0) # Pivot data to get all dates in columns, missing values with zero
df2 = pd.melt(df1, id_vars = ['State', 'Case_Type'], value_vars = df1.columns[2:]) # unpivot data for all dates