我有一个数据帧,看起来像这样:
    province    date        D I R C
360 Incheon     2020-01-20  0 0 1 1
455 Seoul       2020-01-23  0 0 1 1
183 Gyeonggi-do 2020-01-26  0 0 1 1
184 Gyeonggi-do 2020-01-27  0 0 2 2
456 Seoul       2020-01-30  0 0 4 4我需要的是,在第一次更新之后的每一天(在本例中为2020-01-20),我有每个省的“最后一次看到的行”,以防该日期没有更新。因此,在我的示例中,我希望作为结果df:
    province    date        D I R C
1   Incheon     2020-01-20  0 0 1 1
2   Incheon     2020-01-23  0 0 1 1
3   Seoul       2020-01-23  0 0 1 1
4   Gyeonggi-do 2020-01-26  0 0 1 1
5   Incheon     2020-01-26  0 0 1 1
6   Seoul       2020-01-26  0 0 1 1
7   Gyeonggi-do 2020-01-27  0 0 2 2
8   Incheon     2020-01-27  0 0 1 1
9   Seoul       2020-01-27  0 0 1 1
10  Seoul       2020-01-30  0 0 4 4
11  Gyeonggi-do 2020-01-30  0 0 2 2
12  Incheon     2020-01-30  0 0 1 1我尝试过可以看到的here、here和here,但它们略有不同。我的目标是使用plotly制作一个带时间的条形图,我现在可以,但对于每个省份没有任何更新的日期,即没有数据,条形图消失了,我需要它保留下来。
我很感谢你的帮助。
发布于 2020-05-13 23:12:21
您可以使用set_index和reindex,使用来自unique省和日期的所有组合的MultiiIndex.from_product,然后使用groupby省和ffill,dropna删除每个省第一次出现之前的日期,按日期使用sort_index (如有必要)和reset_index,如下所示:
(df.set_index(['province', 'date'])
   .reindex(pd.MultiIndex.from_product([df['province'].unique(), df['date'].unique()], 
                                       names=['province', 'date']))
   .groupby(level='province').ffill()
   .dropna()
   .sort_index(level='date')
   .reset_index()
)
       province        date    D    I    R    C
0       Incheon  2020-01-20  0.0  0.0  1.0  1.0
1       Incheon  2020-01-23  0.0  0.0  1.0  1.0
2         Seoul  2020-01-23  0.0  0.0  1.0  1.0
3   Gyeonggi-do  2020-01-26  0.0  0.0  1.0  1.0
4       Incheon  2020-01-26  0.0  0.0  1.0  1.0
5         Seoul  2020-01-26  0.0  0.0  1.0  1.0
6   Gyeonggi-do  2020-01-27  0.0  0.0  2.0  2.0
7       Incheon  2020-01-27  0.0  0.0  1.0  1.0
8         Seoul  2020-01-27  0.0  0.0  1.0  1.0
9   Gyeonggi-do  2020-01-30  0.0  0.0  2.0  2.0
10      Incheon  2020-01-30  0.0  0.0  1.0  1.0
11        Seoul  2020-01-30  0.0  0.0  4.0  4.0https://stackoverflow.com/questions/61777893
复制相似问题