获取前一周的值Python数据帧

时间:2017-05-10 14:38:03

标签: python pandas dataframe

我有以下数据框:

Date        Time    Quantity  
20171003    5:00           2       
20171003    5:15           5  
....
20171005    5:00           1   
20171005    5:15           9  

我需要创建一个新列,其中包含上周同一天的数量,即:

Date        Time    Quantity    Quantity-1
20171003    5:00           2         NaN
20171003    5:15           5         NaN
....
20171005    5:00           1           2
20171005    5:15           9           5

我想通过使用例如:

来了解如何获得上周的同一天
last_week = today() + relativedelta(weeks=-1, weekday= now.weekday())

如何将此应用于我的数据框?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

您的索引是否有模式?如果是,您可以使用pd.shift()periods参数将是df中的句点数。例如,假设您的Time列始终是5:005:15,并且您有日历日,那么您的period将为7 * 2 = 14

df['Quantity-1'] = df['Quantity'].shift(14)

答案 1 :(得分:1)

如果每天都以完全相同的长度收集数据,那么使用pd.shift作为@EricB提到的应该是完美的。

或者,您可以创建新的数据框和merge,其中天数移动14天,然后合并回专栏datetime上的原始数据框(注意假设您在接下来的14天内同时想要数量。)

df = pd.DataFrame([
    ['20171003', '5:00', '2'], 
    ['20171003', '5:15', '5'],
    ['20171005', '5:00', '1'],
    ['20171005', '5:15', '9'], 
    ['20171019', '5:00', '8']], 
    columns=['date', 'time', 'quantity'])

df.loc[:, 'date'] = pd.to_datetime(df.date)
df2 = df[['date', 'time', 'quantity']]
df2.loc[:, 'date'] = df2.date + datetime.timedelta(weeks=2) # shift by 2 weeks
df_shift = df.merge(df2, on=['time', 'date'], how='left')
df_shift

输出

+-----------+----+----------+----------+
|       date|time|quantity_x|quantity_y|
+-----------+----+----------+----------+
|2017-10-03 |5:00|         2|          |
|2017-10-03 |5:15|         5|          |
|2017-10-05 |5:00|         1|          |
|2017-10-05 |5:15|         9|          |
|2017-10-19 |5:00|         8|         1|
+-----------+----+----------+----------+