python - 提高 pandas 中日期时间比较的性能

标签 python pandas performance function datetime

我有一个 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/

相关文章:

python - 配置不当的 : Error loading psycopg2 module: No module named 'psycopg2._psycopg' zappa

python - 用 Python 绘制蜡烛图

php - 如何提高迭代 DOMDocument 的性能?

使用 ROWNUM 优化 Oracle 查询

python - numpy.ndenumerate 以 Fortran 顺序返回索引?

python - flask /神社 : creating a leaderboard out of an unordered dict object

python - 使用具有相同行值的其他列计算 Pandas 中列的众数

c++ - 更高效的结构如 unordered_map<pair<int, int>, int>

python - 调用嵌入式Qt的.dll函数

python - 避免插入 SQL 表中已有的记录