熊猫的日期差异

时间:2017-10-05 10:48:24

标签: python pandas

我从互联网上下载了一个数据集,其中包含与日常交易相关的数据,格式如下[下面提到的虚拟值]:

ID  Date        Item1 Item2 Item3 Item4 Item5
0   2017-08-28  1234   5678 91011  1213 1415
1   2017-07-27  1234   5678 91011  1213 1415
2   2017-06-26  1234   5678 91011  1213 1415
3   2017-05-25  1234   5678 91011  1213 1415

如何使用日期列获取上周,下个月和过去3个月内发生的交易的值?

我用它来格式化pandas格式的日期: df['week'] = pd.to_datetime(df['week'])

并尝试使用以下方法获取上周的值:

range_max = df['week'].max() 
range_min = range_max - dt.timedelta(days=7)
# take slice with final week of data 

sliced_df = df[(df['week'] >= range_min) & (df['week'] <= range_max)] 

这适用于检索上周的数据,但如何检索特定月份或周的值?

1 个答案:

答案 0 :(得分:1)

以下是一些例子:

import pandas as pd
import datetime
import io

string = u"""ID,Date,Item1,Item2,Item3,Item4,Item5
0,2017-08-28,1234,5678,91011,1213,1415
1,2017-07-27,1234,5678,91011,1213,1415
2,2017-06-26,1234,5678,91011,1213,1415
3,2017-05-25,1234,5678,91011,1213,1415"""

df = pd.read_csv(io.StringIO(string))
df["Date"] = pd.to_datetime(df["Date"])

now = datetime.datetime.now().date()

mask1 = (df.Date < now) & (df.Date > now - datetime.timedelta(days=90)) # 90 days
mask2 = (df.Date.dt.month == 7) # specific month
mask3 = (df.Date.dt.week == 21) # specific week
mask4 = (df.Date.dt.month > now.month-3) # 3 months back
mask5 = (df.Date.dt.strftime("%B").isin(["May","July"])) # stfrtime and you can use this, quite clear!
mask6 = (df.Date.dt.strftime("%A").isin(["Monday","Tuesday"])) # stfrtime and you can use this, quite clear!


# Lastly
df[mask1]
#df[mask2]
#df[mask3]
...

这真的归结为你正在寻找的东西。 更新了几个月和一个星期。