我有以下数据框:
name from amount days
A 7/31/18 200 1
B 7/31/18 300 1
C 7/30/18 200 1
D 7/27/18 100 3
......
G 7/17/18 50 1
H 7/13/18 150 4
我想将它扩展到这个,其中天数不等于 1:
name from amount days
A 7/31/18 200 1
B 7/31/18 300 1
C 7/30/18 200 1
D 7/29/18 100 3
D 7/28/18 100 3
D 7/27/18 100 3
......
G 7/17/18 50 1
H 7/16/18 150 4
H 7/15/18 150 4
H 7/14/18 150 4
H 7/13/18 150 4
如果可能的话,我还想添加一个可以区分原始数据和扩展数据的列(因为我最终需要过滤一些日期):
name from amount days original
A 7/31/18 200 1 1
B 7/31/18 300 1 1
C 7/30/18 200 1 1
D 7/29/18 100 3 0
D 7/28/18 100 3 0
D 7/27/18 100 3 1
......
G 7/17/18 50 1 1
H 7/16/18 150 4 0
H 7/15/18 150 4 0
H 7/14/18 150 4 0
H 7/13/18 150 4 1
编辑:阐明扩展:Days 会告诉您它需要扩展到多少行。或者,您可以使用原始值上方的日期作为边界(条目 7/27 where days=3 将停止在上面的日期为 7/30 的值处。数据有约束以确保它永远不会重叠)。
请您参考如下方法:
大约两步创建dataframe(reindex),调整值(duplicated)
newdf=df.reindex(df.index.repeat(df.days)) # create the df using reindex
adddate=pd.Series(np.concatenate(df.days.apply(np.arange).values),index=newdf.index)# create the timedelta to add
newdf['from']=pd.to_datetime(newdf['from'])+pd.to_timedelta(adddate,unit='d')# assign the value
newdf['original']=(~newdf.index.duplicated()).astype(int)
newdf
Out[240]:
name from amount days original
0 A 2018-07-31 200 1 1
1 B 2018-07-31 300 1 1
2 C 2018-07-30 200 1 1
3 D 2018-07-27 100 3 1
3 D 2018-07-28 100 3 0
3 D 2018-07-29 100 3 0
