我有一个 pandas 数据框,其值如下:
df['ORDER_RECEIVED_DATE'].head()
Out[91]:
0 2018-01-01
1 2018-01-01
2 2018-01-01
3 2018-01-01
4 2018-01-01
我正在定义一个自定义函数来创建另一列“Period”,具体取决于与“ORDER_RECEIVED_DATE”中的日期值的比较
def period(x):
if x<pd.to_datetime('01-04-2018'):
y=0
elif x<pd.to_datetime('04-05-2018'):
y=1
elif x<pd.to_datetime('05-31-2018'):
y=2
elif x<pd.to_datetime('08-02-2018'):
y=3
elif x<pd.to_datetime('09-27-2018'):
y=4
elif x<pd.to_datetime('01-03-2019'):
y=5
elif x<pd.to_datetime('02-14-2019'):
y=6
elif x<pd.to_datetime('03-28-2019'):
y=7
else:
y=8
return y
最后将其应用到 Pandas Column:
df['Period'] = df['ORDER_RECEIVED_DATE'].apply(lambda x:period(x))
但对于大约 100 万条记录来说,速度非常慢。我怎样才能加快速度?
最佳答案
假设您创建一个日期数组
dates = pd.to_datetime([
'01-04-2018', '04-05-2018', '05-31-2018',
'08-02-2018', '09-27-2018', '01-03-2019',
'02-14-2019', '03-28-2019'
]).values
您可以使用searchsorted
,它会告诉您每个比较日期按照日期
的顺序所属的位置
df.assign(Period=dates.searchsorted(df.ORDER_RECEIVED_DATE))
ORDER_RECEIVED_DATE Period
0 2018-01-01 0
1 2018-02-01 1
2 2018-03-01 1
3 2018-04-01 1
4 2018-05-01 2
5 2018-06-01 3
6 2018-07-01 3
7 2018-08-01 3
8 2018-09-01 4
9 2018-10-01 5
10 2018-11-01 5
11 2018-12-01 5
12 2019-01-01 5
13 2019-02-01 6
14 2019-03-01 7
15 2019-04-01 8
关于python - 提高 pandas 中日期时间比较的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55907263/