提高熊猫python的性能

时间:2019-03-22 14:13:45

标签: python pandas performance iteration

以下是一些公共交通工具上的数据集示例: data set

日期为2018年6月1日至2018年6月30日,

时间是营业时间,从5am到24(0)am

人数是该特定日期,时间和行程中的人数。

from_to是这些人进入和离开(一种旅行)的地方,

最后是工作日。

我在这里需要为每次旅行创建一个时间表,例如,如果我想为旅行“ G1_G2”创建一个表,那么我现在使用的代码是:

for i in [0,1,2,3,4,5,6]:
    for j in [0,1,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]:
        df['people'][(df['weekday'] == i)&(df['from_to'] == 'G1_G2') & (df['time'] == j)].mean()

其中“ i”是工作日,而j是营业时间。 结果将是一个像这样的表: output table

但是这里的问题是,每个表的创建大约需要10秒钟,这里大约有11,000种旅行,这将花费30个小时。

还有其他方法可以使用python来提高效率吗?

谢谢你!

1 个答案:

答案 0 :(得分:0)

可能使用groupby和聚合可以做到这一点。

import pandas as pd

我特意在此使用一个小数据示例。如果您有许多较小的表格(根据我从您的描述中得出的解释),则可能需要先进行串联。

df = pd.DataFrame({'date':['2018-06-01', '2018-06-01', '2018-06-01', '2018-06-02', '2018-06-02', '2018-06-02'], 'time':[0,0,0,1,1,1], 'people':[0,2,2,4,5,7], 'from_to':['BR13_BR13', 'BR13_BR13','BR13_BR13','BR13_BR13','BR13_BR13','BR13_BR13'], 'weekday':[4,4,4,5,5,5]})

以下代码的格式较长,而不是输出表的宽格式,但是如果需要,可以将其变宽:

df.groupby(['from_to', 'time', 'weekday']).aggregate('people').mean()

这将产生以下输出:

from_to    time  weekday
BR13_BR13  0     4          1.333333
           1     5          5.333333
Name: people, dtype: float64