PANDAS(在熊猫的数据框中填充日期时间和ffill()数据)

时间:2020-06-04 06:45:52

标签: python pandas date time-series

我有一个数据框,如下所示,它只有工作日数据(即 排除周末)

effective_date,ent_id 
2020-02-03,349114.0
2020-02-03,1559910.0
2020-02-03,23431626.0
2020-02-03,15747736.0
2020-02-04,21349114.0
2020-02-04,15559910.0
2020-02-04,323431626.0
2020-02-04,5747736.0
2020-02-05,76349114.0
2020-02-05,5459910.0
2020-02-05,89431626.0 
2020-02-05,37747736.0 
2020-02-06,10349114.0
2020-02-06,26559910.0
2020-02-06,35431626.0
2020-02-06,88747736.0
2020-02-07,34913414.0 
2020-02-07,15591910.0 
2020-02-07,234318626.0
2020-02-07,1574436.0
2020-02-10,139114.0 
2020-02-10,4359910.0
2020-02-10,43431626.0
2020-02-10,10947736.0

我必须对此数据帧执行两个操作1)填充 缺少时间序列,即2020-02-08和2020-02-09 2)将转发 填充前一天的全部数据

所以我的输出数据框应该是这样

effective_date,ent_id
> 2020-02-03,349114.0 2020-02-03,1559910.0 2020-02-03,23431626.0
> 2020-02-03,15747736.0 2020-02-04,21349114.0 2020-02-04,15559910.0
> 2020-02-04,323431626.0 2020-02-04,5747736.0 2020-02-05,76349114.0
> 2020-02-05,5459910.0 2020-02-05,89431626.0 2020-02-05,37747736.0
> 2020-02-06,10349114.0 2020-02-06,26559910.0 2020-02-06,35431626.0
> 2020-02-06,88747736.0 2020-02-07,34913414.0 2020-02-07,15591910.0
> 2020-02-07,234318626.0 2020-02-07,1574436.0 2020-02-08,34913414.0
> 2020-02-08,15591910.0 2020-02-08,234318626.0 2020-02-08,1574436.0
> 2020-02-09,34913414.0 2020-02-09,15591910.0 2020-02-09,234318626.0
> 2020-02-09,1574436.0 2020-02-10,139114.0 2020-02-10,4359910.0
> 2020-02-10,43431626.0 2020-02-10,10947736.0

1 个答案:

答案 0 :(得分:1)

GroupBy.cumcount用于计数器,DataFrame.set_index用于MultiIndexDataFrame.unstack进行整形,DataFrame.asfreq加上所有丢失的日期时间,然后整形使用DataFrame.stack,先删除计数器级别,然后DataFrame.reset_index,然后再将effective_date转换为列:

df['effective_date'] = pd.to_datetime(df['effective_date'])

df1 = (df.set_index(['effective_date',df.groupby('effective_date').cumcount()])
         .unstack()
         .asfreq('D', method='ffill')
         .stack()
         .reset_index(level=1, drop=True)
         .reset_index())

print (df1)
   effective_date       ent_id
0      2020-02-03     349114.0
1      2020-02-03    1559910.0
2      2020-02-03   23431626.0
3      2020-02-03   15747736.0
4      2020-02-04   21349114.0
5      2020-02-04   15559910.0
6      2020-02-04  323431626.0
7      2020-02-04    5747736.0
8      2020-02-05   76349114.0
9      2020-02-05    5459910.0
10     2020-02-05   89431626.0
11     2020-02-05   37747736.0
12     2020-02-06   10349114.0
13     2020-02-06   26559910.0
14     2020-02-06   35431626.0
15     2020-02-06   88747736.0
16     2020-02-07   34913414.0
17     2020-02-07   15591910.0
18     2020-02-07  234318626.0
19     2020-02-07    1574436.0
20     2020-02-08   34913414.0
21     2020-02-08   15591910.0
22     2020-02-08  234318626.0
23     2020-02-08    1574436.0
24     2020-02-09   34913414.0
25     2020-02-09   15591910.0
26     2020-02-09  234318626.0
27     2020-02-09    1574436.0
28     2020-02-10     139114.0
29     2020-02-10    4359910.0
30     2020-02-10   43431626.0
31     2020-02-10   10947736.0
相关问题