我有一个df
像这样的数据框:
Col1 Col2 Col3 StartDate EndDate Qty
24HR A1 B1 1/5/2020 2/28/2020 4.2
asd A2 B2 5/5/2020 7/15/2020 35
我想根据之间的月数重复数据框的每一行StartDate
并EndDate
获得以下类型的内容:
Col1 Col2 Col3 StartDate EndDate Qty
24HR A1 B1 1/5/2020 1/31/2020 4.2
24HR A1 B1 2/1/2020 2/28/2020 4.2
asd A2 B2 5/5/2020 5/31/2020 35
asd A2 B2 6/1/2020 6/30/2020 35
asd A2 B2 7/1/2020 7/15/2020 35
我可以使用这种类型的东西,但它在逻辑上是可行的:
df.StartDate = df.apply(lambda x: pd.date_range(start=x['StartDate'], end=x['EndDate'], freq='MS'), axis=1)
df = df.explode('StartDate')
我不知道如何解决这个问题。
让我们快速修复
df['Date'] = df.apply(lambda x: pd.date_range(start=x['StartDate'], end=x['EndDate'], freq='D'), axis=1)
df=df.explode('Date')
df['Month']=df.Date.dt.strftime('%y-%m')
df=df.groupby(['Col1','Col2','Col3','Qty','Month']).Date.agg(['first','last']).reset_index()
df
Col1 Col2 Col3 Qty Month first last
0 24HR A1 B1 4.2 20-01 2020-01-05 2020-01-31
1 24HR A1 B1 4.2 20-02 2020-02-01 2020-02-28
2 asd A2 B2 35.0 20-05 2020-05-05 2020-05-31
3 asd A2 B2 35.0 20-06 2020-06-01 2020-06-30
4 asd A2 B2 35.0 20-07 2020-07-01 2020-07-15
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句