gpt4 book ai didi

python - 在 Pandas 数据框中定位元素时减少执行时间

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:48 24 4
gpt4 key购买 nike

我问了另一个question在这里,我确定了脚本中的瓶颈,所以我更清楚地提出了我的问题。我的代码如下所示:

temp=df["IPs"]
times_db_all = [df[temp == user]["time"].values for user in user_db.values]

%timeit times_db_all = [df_temp[temp == user]["time"].values for user in user_db.values[0:3]]
1 loops, best of 3: 848 ms per loop #848ms for 3 users !!

我的 df 看起来像这样:

IPs        time
1.1.1.1 datetime.datetime(2017, 1, 3, 0, 0, 3, tzinfo=tzutc()),
1.1.1.1 datetime.datetime(2017, 1, 4, 1, 7, 30, tzinfo=tzutc()),
3.3.3.3 datetime.datetime(2017, 1, 4, 5, 58, 52, tzinfo=tzutc()),
1.1.1.1 datetime.datetime(2017, 1, 10, 16, 22, 56, tzinfo=tzutc())
4.4.4.4 datetime.datetime(2017, 1, 10, 16, 23, 01, tzinfo=tzutc())
....

user_db.values = ["1.1.1.1","3.3.3.3","4.4.4.4",...]

目标是为每个用户在 df 的“时间”列中获取所有时间戳的列表。然后我使用这个列表来检查用户在网站上停留了多长时间以及他访问了多少次:

       IP       time
1.1.1.1 [datetime.datetime(2017, 1, 3, 0, 0, 3, tzinfo=tzutc()),
datetime.datetime(2017, 1, 4, 1, 7, 30, tzinfo=tzutc()),
datetime.datetime(2017, 1, 10, 16, 22, 56, tzinfo=tzutc())]
3.3.3.3 [datetime.datetime(2017, 1, 4, 5, 58, 52, tzinfo=tzutc())]
4.4.4.4 [datetime.datetime(2017, 1, 10, 16, 23, 01, tzinfo=tzutc())]

我的问题是我有 350 万行,这大大减慢了该行的执行速度。

有什么方法可以更快地完成同样的事情?

最佳答案

您不应该像现在这样使用 for 循环来进行单独的 bool 选择。 isin 方法正是为此目的而设计的,它将选择与 user_db 中的任何值匹配的行。试试吧

df.loc[df['IPs'].isin(user_db.values), "time"]

关于python - 在 Pandas 数据框中定位元素时减少执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591696/

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