Python 3.x 熊猫基于不同数据帧上每行的信息创建新数据帧

Python 3.x 熊猫基于不同数据帧上每行的信息创建新数据帧,python-3.x,pandas,Python 3.x,Pandas,这就是我所拥有的: ID PRICE VOLUME PRODUC FROM_DATE TO_DATE NUMDAYS 1 20.5 15.0 prod_1 2018-08-06 2018-08-13 7 2 15.6 10.0 prod_2 2018-08-06 2018-08-08 2 这就是我想要实现的目标: ID PRICE VOLUME PRODU

这就是我所拥有的:

ID  PRICE   VOLUME  PRODUC      FROM_DATE   TO_DATE         NUMDAYS

1   20.5    15.0    prod_1      2018-08-06      2018-08-13      7
2   15.6    10.0    prod_2      2018-08-06      2018-08-08      2
这就是我想要实现的目标:

ID  PRICE   VOLUME  PRODUC      FROM_DATE   TO_DATE         NUMDAYS

1   20.5    15.0    prod_1      2018-08-06      2018-08-07      1
1   20.5    15.0    prod_1      2018-08-07      2018-08-08      1
1   20.5    15.0    prod_1      2018-08-08      2018-08-09      1
1   20.5    15.0    prod_1      2018-08-09      2018-08-10      1
1   20.5    15.0    prod_1      2018-08-10      2018-08-11      1
1   20.5    15.0    prod_1      2018-08-11      2018-08-12      1
1   20.5    15.0    prod_1      2018-08-12      2018-08-13      1
2   15.6    10.0    prod_2      2018-08-06      2018-08-07      1
2   15.6    10.0    prod_2      2018-08-07      2018-08-08      1
因此,我有一个数据框架,其中包含影响不同日期的产品的信息

  • 产品可能影响1天到n天
  • 音量会影响两个日期之间的每个日期
我怎么做呢

我试过: -为数据帧的每个元素执行for循环,但

df_results = pd.DataFrame(columns=df.columns)
for index, row in df.iterrows():
    day = row.to_dict()
    for i in range(0,int(row['numdays'])):
        day['NUMDAYS'] = 1
        day['FROM_DATE'] = row['FROM_DATE']+datetime.timedelta(days=i)
        day['TO_DATE'] =  day['FROM_DATE'] + datetime.timedelta(days=1)
        df_aux = pd.DataFrame.from_dict(day)
        df_results .append(df_aux)

但是我不能让它工作

在熊猫中最好避免循环,因为:

#convert columns to datetimes if necessary
df['FROM_DATE'] = pd.to_datetime(df['FROM_DATE'])
df['TO_DATE'] = pd.to_datetime(df['TO_DATE'])

#repeat rows
df = df.loc[np.repeat(df.index, df['NUMDAYS'])]

#add timedeltas by counter
df['FROM_DATE'] += pd.to_timedelta(df.groupby('ID').cumcount(), unit='d')
#add one dau
df['TO_DATE'] = df['FROM_DATE'] + pd.Timedelta(1, unit='d')
#assign scalar
df['NUMDAYS'] = 1
#create default unique index
df = df.reset_index(drop=True)
print (df)
   ID  PRICE  VOLUME  PRODUC  FROM_DATE    TO_DATE  NUMDAYS
0   1   20.5    15.0  prod_1 2018-08-06 2018-08-07        1
1   1   20.5    15.0  prod_1 2018-08-07 2018-08-08        1
2   1   20.5    15.0  prod_1 2018-08-08 2018-08-09        1
3   1   20.5    15.0  prod_1 2018-08-09 2018-08-10        1
4   1   20.5    15.0  prod_1 2018-08-10 2018-08-11        1
5   1   20.5    15.0  prod_1 2018-08-11 2018-08-12        1
6   1   20.5    15.0  prod_1 2018-08-12 2018-08-13        1
7   2   15.6    10.0  prod_2 2018-08-06 2018-08-07        1
8   2   15.6    10.0  prod_2 2018-08-07 2018-08-08        1