Python 如果累计新冠病毒-19病例数为0,如何将每个日期和病例类型的所有状态归零

Python 如果累计新冠病毒-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

我收集了印度每个州的新冠病毒-19的数据。第一个日期为2020-03-10,无论案例类型如何。对于每一天,API只返回累积案例>0的一组状态。因此,我想将数据帧中的所有状态按日期和case_类型归零,因为它们还没有任何case

   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