【发布时间】:2018-10-16 11:51:37
【问题描述】:
我想计算指定日期的月份周数。对于计算月份中的星期,我目前使用用户定义的函数。
输入数据框:
输出数据框:
这是我尝试过的:
from math import ceil
def week_of_month(dt):
"""
Returns the week of the month for the specified date.
"""
first_day = dt.replace(day=1)
dom = dt.day
adjusted_dom = dom + first_day.weekday()
return int(ceil(adjusted_dom/7.0))
之后,
import pandas as pd
df = pd.read_csv("input_dataframe.csv")
df.date = pd.to_datetime(df.date)
df['year_of_date'] = df.date.dt.year
df['month_of_date'] = df.date.dt.month
df['day_of_date'] = df.date.dt.day
wom = pd.Series()
# worker function for creating week of month series
def convert_date(t):
global wom
wom = wom.append(pd.Series(week_of_month(datetime.datetime(t[0],t[1],t[2]))), ignore_index = True)
# calling worker function for each row of dataframe
_ = df[['year_of_date','month_of_date','day_of_date']].apply(convert_date, axis = 1)
# adding new computed column to dataframe
df['week_of_month'] = wom
# here this updated dataframe should look like Output data frame.
它的作用是对每一行数据框使用给定的函数计算每月的一周。随着数据框增长到更多行,它会使计算变慢。因为目前我有超过 10M+ 行。
我正在寻找一种更快的方法来执行此操作。我可以对此代码进行哪些更改以对所有行进行矢量化此操作?
提前致谢。
编辑:阅读答案后对我有用的代码如下,
first_day_of_month = pd.to_datetime(df.date.values.astype('datetime64[M]'))
df['week_of_month'] = np.ceil((df.date.dt.day + first_day_of_month.weekday) / 7.0).astype(int)
【问题讨论】:
标签: python pandas date vectorization apply