创建新的数据框架列,从datetime到isoweekday



我有这个数据框,我想创建一个新的列,记录碰撞发生在一周中的哪一天。

collision_date
0   2020-03-14
1   2020-07-26
2   2009-02-03
3   2009-02-28
4   2009-02-09

我试过各种方法,但都没用。

df["day of the week"] = df["collision_date"].isoweekday()
df["day of the week"] = df["collision_date"].apply(isoweekday)

假设collision_date是日期时间,我们可以使用dt.weekday(+1匹配返回1-7而不是0-6的isoweekday):

# Convert If needed
df['collision_date'] = pd.to_datetime(df['collision_date'])
# Turn into Number
df['day of week'] = df['collision_date'].dt.weekday + 1

对于apply,较慢的选项是每个日期调用isoweekday:

from datetime import date

# Convert If needed
df['collision_date'] = pd.to_datetime(df['collision_date'])
# Call isoweekday per date
df['day of week'] = df['collision_date'].apply(date.isoweekday)

df:

collision_date  day of week
0     2020-03-14            6
1     2020-07-26            7
2     2009-02-03            2
3     2009-02-28            6
4     2009-02-09            1

Timing Information via timeit:

1000行样本数据:

df = pd.DataFrame({
'collision_date': pd.date_range(start='now', periods=1000, freq='D')
})

dt.weekday:

%timeit df['collision_date'].dt.weekday + 1
261 µs ± 1.91 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

apply:

%timeit df['collision_date'].apply(date.isoweekday)
2.53 ms ± 90.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

最新更新