我有一个类似于下面的数据框架:
test = {"id": ["A", "A", "A", "B", "B", "B"],
"date": ["09-02-2013", "09-03-2013", "09-05-2013", "09-15-2013", "09-17-2013", "09-18-2013"],
"country": ["Poland", "Poland", "France", "Scotland", "Scotland", "Canada"]}
,我想要一个表返回这个:
<表类>id 日期 国家 tbody><<tr>09-02-2013 波兰 09-03-2013 波兰 09-04-2013 波兰 09-05-2013 法国 B09-15-2013 苏格兰 B09-16-2013 苏格兰 B09-17-2013 苏格兰 B09-18-2013 加拿大 表类>
IIUC,您可以生成每个组的date_range
,explode
,然后merge
和ffill
的值:
out = (test_df
.merge(pd
.to_datetime(test_df['date'], dayfirst=False)
.groupby(test_df['id'])
.apply(lambda g: pd.date_range(g.min(), g.max(), freq='D'))
.explode().dt.strftime('%m-%d-%Y')
.reset_index(name='date'),
how='right'
)
.assign(country=lambda d: d.groupby('id')['country'].ffill())
)
输出:
id date country
0 A 09-02-2013 Poland
1 A 09-03-2013 Poland
2 A 09-04-2013 Poland
3 A 09-05-2013 France
4 B 09-15-2013 Scotland
5 B 09-16-2013 Scotland
6 B 09-17-2013 Scotland
7 B 09-18-2013 Canada