Pandas 基于日期范围重复数据框的行
我有这样一个数据帧:Pandas 基于日期范围重复数据框的行,pandas,python-3.8,Pandas,Python 3.8,我有这样一个数据帧: Col1 Col2 Col3 StartDate EndDate Qty 24HR A1 B1 1/1/2020 2/28/2020 4.2 asd A2 B2 5/1/2020 8/31/2020 35 我想根据StartDate和EndDate之间的月数重复数据帧的每一行,以获得以下类型的内容: Col1 Col2 Col3 StartDate
Col1 Col2 Col3 StartDate EndDate Qty
24HR A1 B1 1/1/2020 2/28/2020 4.2
asd A2 B2 5/1/2020 8/31/2020 35
我想根据StartDate和EndDate之间的月数重复数据帧的每一行,以获得以下类型的内容:
Col1 Col2 Col3 StartDate EndDate Qty
24HR A1 B1 1/1/2020 1/31/2020 4.2
24HR A1 B1 2/1/2020 2/28/2020 4.2
asd A2 B2 5/1/2020 5/31/2020 35
asd A2 B2 6/1/2020 6/30/2020 35
asd A2 B2 7/1/2020 7/31/2020 35
asd A2 B2 8/1/2020 8/31/2020 35
我不知道如何处理这个问题。让我们试试爆炸
让我们试试爆炸
你可以试试这个
list=[]
for i in range(df.shape[0]):
list.append(int(df['EndDate'][i][0])-int(df['StartDate'][i][0])+1)
df= df.reindex(df.index.repeat(pd.Series(list)))
print(df)
# output
Col1 Col2 Col3 StartDate EndDate Qty
0 24HR A1 B1 1/1/2020 2/28/2020 4.2
0 24HR A1 B1 1/1/2020 2/28/2020 4.2
1 asd A2 B2 5/1/2020 8/31/2020 35.0
1 asd A2 B2 5/1/2020 8/31/2020 35.0
1 asd A2 B2 5/1/2020 8/31/2020 35.0
1 asd A2 B2 5/1/2020 8/31/2020 35.0
编辑-此代码的简短版本
你可以试试这个
list=[]
for i in range(df.shape[0]):
list.append(int(df['EndDate'][i][0])-int(df['StartDate'][i][0])+1)
df= df.reindex(df.index.repeat(pd.Series(list)))
print(df)
# output
Col1 Col2 Col3 StartDate EndDate Qty
0 24HR A1 B1 1/1/2020 2/28/2020 4.2
0 24HR A1 B1 1/1/2020 2/28/2020 4.2
1 asd A2 B2 5/1/2020 8/31/2020 35.0
1 asd A2 B2 5/1/2020 8/31/2020 35.0
1 asd A2 B2 5/1/2020 8/31/2020 35.0
1 asd A2 B2 5/1/2020 8/31/2020 35.0
编辑-此代码的简短版本
list=[]
for i in range(df.shape[0]):
list.append(int(df['EndDate'][i][0])-int(df['StartDate'][i][0])+1)
df= df.reindex(df.index.repeat(pd.Series(list)))
print(df)
# output
Col1 Col2 Col3 StartDate EndDate Qty
0 24HR A1 B1 1/1/2020 2/28/2020 4.2
0 24HR A1 B1 1/1/2020 2/28/2020 4.2
1 asd A2 B2 5/1/2020 8/31/2020 35.0
1 asd A2 B2 5/1/2020 8/31/2020 35.0
1 asd A2 B2 5/1/2020 8/31/2020 35.0
1 asd A2 B2 5/1/2020 8/31/2020 35.0
df= df.reindex(df.index.repeat(pd.Series(df.EndDate.str[0].astype(int)+1-df.StartDate.str[0].astype(int))))