如何使用pandas.series.map来计算日期重复次数?

时间:2015-04-21 01:49:24

标签: python datetime pandas dataframe

此代码可以通过这种方式计算日期的频率:周一,周二,周三和周四以及周六,周日。 如何更改map函数的参数以重复两组中的日期: 1.平日上午9点到下午5点 2.本周其余时间(工作日和周末下午5点至9点)。

d = ['10/3/2013 18:36', '10/3/2013 23:40', '10/3/2013 20:56', '10/4/2013 9:35', '11/7/2013 10:02', '11/11/2013 14:45', '12/1/2013 12:04']
df = pd.DataFrame(pd.to_datetime(d), columns=["DATE"])

df["DATE"].dt.weekday.map({0:0,1:0,2:0,3:0,4:0,5:1,6:1}).value_counts()

2 个答案:

答案 0 :(得分:0)

由于.map()可以直接应用于系列并且还可以使用任意功能,因此您可以使用:

df['DATE'].map(lambda dt:
    'Office' if dt.weekday() in {0,1,2,3,4} and 9 <= dt.hour < 17
    else 'Out of office'
).value_counts()

结果是:

Out of office    4
Office           3
dtype: int64

答案 1 :(得分:0)

Pandas有一些识别工作日的内置方法。实际上可能有一些内置的营业时间功能,但我不确定,因为我不经常处理日期时间:

df['in_business_hours'] = (
    df['DATE'].map(pd.datetools.isBusinessDay) & 
    ((9 <= df.DATE.dt.hour) & (df.DATE.dt.hour <= 16))
)
df['in_business_hours'].value_counts()
Out[14]: 
False    4
True     3
dtype: int64