gpt4 book ai didi

python - 提高 pandas python 的性能

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:33 24 4
gpt4 key购买 nike

这是我从一些公共(public)交通工具获取的数据集的示例: data set .

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

时间为营业时间,从早上 5 点到凌晨 24(0) 点,

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

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 更高效地完成此操作?

提前致谢!

最佳答案

也许使用 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

关于python - 提高 pandas python 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55301532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com