使用pandas时不应忘记的一点是Pandas的Series和DataFrames是在NumPy库之上设计的。并且,pandas可以与NumPy阵列和操作无缝衔接。
下面我们使用NumPy的 digitize()函数更进一步。它类似于上面pandas的cut(),因为数据将被分箱,但这次它将由一个索引数组表示,这些索引表示每小时所属的bin。然后将这些索引应用于价格数组:
- @timeit(repeat=3, number=100)
- def apply_tariff_digitize(df):
- prices = np.array([12, 20, 28])
- bins = np.digitize(df.index.hour.values, bins=[7, 17, 24])
- df['cost_cents'] = prices[bins] * df['energy_kwh'].values
与cut函数一样,这种语法非常简洁易读。
- >>> apply_tariff_digitize(df)
- Best of 3 trials with 100 function calls per trial:
- Function `apply_tariff_digitize` ran in average of 0.002 seconds.
0.002秒! 虽然仍有性能提升,但已经很边缘化了。