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))))