Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高python中的性能_Python_Pandas_Performance_Iteration - Fatal编程技术网

提高python中的性能

提高python中的性能,python,pandas,performance,iteration,Python,Pandas,Performance,Iteration,以下是一些公共交通工具的数据集示例: 日期为2018-06-01至2018-06-30 时间为运行时间,从上午5点到24(0)点 People是特定日期、时间和行程中的人数 从_到是这些人进出的地方(一种行程) 最后是工作日 这里我需要做的是为每次行程创建一个时间表,例如,如果我想为行程“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,

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

日期为2018-06-01至2018-06-30

时间为运行时间,从上午5点到24(0)点

People是特定日期、时间和行程中的人数

从_到是这些人进出的地方(一种行程)

最后是工作日

这里我需要做的是为每次行程创建一个时间表,例如,如果我想为行程“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是工作时间。 结果将是一个如下表:

但这里的问题是,每个表创建大约需要10秒,这里大约有11000种旅行类型,需要30多个小时

使用python还有其他更高效的方法吗


非常感谢

使用groupby和aggregate,您可能可以做到这一点

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

可能使用groupby和aggregate可以做到这一点

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

如果我正确理解了您的问题,您需要一个groupby聚合函数。不要将数据作为图像提供,而是提供一个简短的示例,这样我们就可以复制您尝试过的内容,看看如何改进。如果我正确理解您的问题,您需要一个groupby聚合函数。不要将数据作为图像提供,但这只是一个简短的例子,所以我们可以照搬你们的做法,看看我们如何改进。