如何使用熊猫根据日期列和天数列将行添加到数据框

时间:2019-11-20 18:17:17

标签: python pandas

我想知道如何使用数据框列中的开始日期,并让它从另一列中的天数开始向数据框添加行。每天有新日期。

本质上,我正在尝试翻转此数据框:

df = pd.DataFrame({
                    'Name':['Peter', 'Peter', 'Peter', 'Peter'],
                    'Planned_Start':['1/1/2019', '1/2/2019', '1/15/2019', '1/2/2019'], 
                    'Duration':[2, 3, 5, 6], 
                    'Hrs':[0.6, 1, 1.2, 0.3]}) 

...进入此数据框:

df_2 = pd.DataFrame({
                    'Name':['Peter', 'Peter', 'Peter', 'Peter', 'Peter', 'Peter', 'Peter', 'Peter'],
                    'Date':['1/1/2019', '1/2/2019', '1/2/2019', '1/3/2019', '1/4/2019','1/10/2019', '1/15/2019', '1/16/2019'], 
                    'Hrs':[0.6, 0.6, 1, 1, 1, 1.2, 0.3, 0.3]}) 

我是编程新手,并且尝试了以下操作:

df_2 = pd.DataFrame({
    'date': pd.date_range(
    start = df.Planned_Start,
    end = pd.to_timedelta(df.Duration, unit='D'),
    freq = 'D'
    )
})

...和...

df["date"] = df.Planned_Start + timedelta(int(df.Duration))

没有运气。

1 个答案:

答案 0 :(得分:0)

由于您的df_2从我看到的内容来看有点不正确,因此我不确定您要实现的目标。

如果您希望将持续时间列作为天数,并将这么多日期添加到“日期”列中,则以下代码可以实现:

您还可以使用pd.Series.drop()方法删除不需要的任何列:

df = pd.DataFrame({
                    'Name':['Peter', 'Peter', 'Peter', 'Peter'],
                    'Planned_Start':['1/1/2019', '1/2/2019', '1/15/2019', '1/2/2019'], 
                    'Duration':[2, 3, 5, 6], 
                    'Hrs':[0.6, 1, 1.2, 0.3]}) 

df_new = pd.DataFrame()
for i, row in df.iterrows():
  for duration in range(row.Duration):
      date = pd.Series([pd.datetime.strptime(row.Planned_Start, '%m/%d/%Y') + timedelta(days=duration)], index=['date'])
      newrow = row.append(date)
      df_new = df_new.append(newrow, ignore_index=True)