首页 > 解决方案 > 有没有比在 python 中使用 loc 更快的方法来根据现有数据框填充数据框中的新列?

问题描述

我有一个数据框,其中包括工厂每天生产的产品总数,但它是一个累积字段,而不是每日值。我试图通过从第二天的数字中减去每天的累积数字来计算每日值。这是我正在使用的代码。我loc用来确保它在原始数据框中插入新值。这样,1000 行需要 10 秒,这有点长,因为原始数据要大得多。想知道有没有更快的方法。

前:

    date        sum     
0   2020-03-24  10  
1   2020-03-25  50  
2   2020-03-26  90  
3   2020-03-27  140 
4   2020-03-28  180 

代码:

for i in range(1, 1000):
    data.loc[i, 'daily_products'] = data.loc[i, 'sum'] - data.loc[i-1, 'sum']

后:

    date        sum     daily_products
0   2020-03-24  10  
1   2020-03-25  50      40
2   2020-03-26  90      40
3   2020-03-27  140     50
4   2020-03-28  180     40

以及 1000 行所需的时间:

Total runtime of the program is 9.468996286392212

标签: pythonpandasdataframeloopspandas-loc

解决方案


让使用

data['daily_products'] = data['sum'].diff()

每个循环 159 µs ± 3.66 µs(7 次运行的平均值 ± 标准偏差,每次 10000 个循环)

相对

for i in range(1, len(data)-1):
    data.loc[i, 'daily_products'] = data.loc[i, 'sum'] - data.loc[i-1, 'sum']

每个循环 716 µs ± 26.9 µs(7 次运行的平均值 ± 标准偏差,每次 1000 个循环)

和...

data['daily_products'] = data['sum'] - data['sum'].shift(-1)

每个循环 305 µs ± 6.18 µs(7 次运行的平均值 ± 标准偏差,每次 1000 个循环)


推荐阅读