- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 df.loc[df.groupby(keys)['column'].idxmax()]
按最大值从组中选择行。
但是,我发现 df.groupby(keys)['column'].idxmax()
在我大约 2700 万行的数据集上花费了很长时间。有趣的是,在我的数据集上运行 df.groupby(keys)['column'].max()
只需 13 秒,而运行 df.groupby(keys)['column'].idxmax ()
需要 55 分钟。我不明白为什么返回行的索引比从行返回值要长 250 倍。也许我可以做些什么来加快 idxmax 的速度?
如果不是,是否有另一种方法可以比使用 idxmax 更快地按最大值从组中选择行?
有关其他信息,我使用了两个键并在 groupby 和 idxmax 操作之前根据这些键对数据帧进行了排序。这是它在 Jupyter Notebook 中的样子:
将 pandas 导入为 pd
df = pd.read_csv('/data/Broadband Data/fbd_us_without_satellite_jun2019_v1.csv', encoding='ANSI', \
usecols=['BlockCode', 'HocoNum', 'HocoFinal', 'TechCode', 'Consumer', 'MaxAdDown', 'MaxAdUp'])
%%time
df = df[df.Consumer == 1]
df.sort_values(['BlockCode', 'HocoNum'], inplace=True)
print(df)
HocoNum HocoFinal BlockCode TechCode
4631064 130077 AT&T Inc. 10010201001000 10
4679561 130077 AT&T Inc. 10010201001000 11
28163032 130235 Charter Communications 10010201001000 43
11134756 131480 WideOpenWest Finance, LLC 10010201001000 42
11174634 131480 WideOpenWest Finance, LLC 10010201001000 50
... ... ... ... ...
15389917 190062 Broadband VI, LLC 780309900000014 70
10930322 130081 ATN International, Inc. 780309900000015 70
15389918 190062 Broadband VI, LLC 780309900000015 70
10930323 130081 ATN International, Inc. 780309900000016 70
15389919 190062 Broadband VI, LLC 780309900000016 70
Consumer MaxAdDown MaxAdUp
4631064 1 6.0 0.512
4679561 1 18.0 0.768
28163032 1 940.0 35.000
11134756 1 1000.0 50.000
11174634 1 1000.0 50.000
... ... ... ...
15389917 1 25.0 5.000
10930322 1 25.0 5.000
15389918 1 25.0 5.000
10930323 1 25.0 5.000
15389919 1 25.0 5.000
[26991941 rows x 7 columns]
Wall time: 21.6 s
%time df.groupby(['BlockCode', 'HocoNum'])['MaxAdDown'].max()
Wall time: 13 s
BlockCode HocoNum
10010201001000 130077 18.0
130235 940.0
131480 1000.0
10010201001001 130235 940.0
10010201001002 130077 6.0
...
780309900000014 190062 25.0
780309900000015 130081 25.0
190062 25.0
780309900000016 130081 25.0
190062 25.0
Name: MaxAdDown, Length: 20613795, dtype: float64
%time df.groupby(['BlockCode', 'HocoNum'])['MaxAdDown'].idxmax()
Wall time: 55min 24s
BlockCode HocoNum
10010201001000 130077 4679561
130235 28163032
131480 11134756
10010201001001 130235 28163033
10010201001002 130077 4637222
...
780309900000014 190062 15389917
780309900000015 130081 10930322
190062 15389918
780309900000016 130081 10930323
190062 15389919
Name: MaxAdDown, Length: 20613795, dtype: int64
您会在第一行数据中看到同一 BlockCode 中有两个 AT&T 条目,一个用于 6Mbps 的 MaxAdDown,一个用于 18Mbps。我想保留 18Mbps 行并删除 6Mbps 行,以便每个公司每个 BlockCode 有一行具有最大 MaxAdDown 值。我需要整行,而不仅仅是 MaxAdDown 值。
最佳答案
排序并删除重复项:
df.sort('MaxAdDown').drop_duplicates(['BlockCode', 'HocoNum'], keep='last')
关于Python Pandas Dataframe idxmax 太慢了。备择方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63271831/
问候,我有一个索引从 0 到 00.6279999999999999 的 df。 我使用 idxmax() 查找一列中最大变量的索引 - df[Column A]。假设索引是 0.5579999999
我正在尝试查找多索引 Pandas 数据帧中多列中最大值的索引。 Kommune Upplands Vallentuna... Kiruna Year Party 19
考虑 pd.Series s import pandas as pd import numpy as np np.random.seed([3,1415]) s = pd.Series(np.rand
我有一个如下所示的数据框: column_1 column_2 2 3 6 4 5 5 . . . 我想为上述数据框的每一行返回该行中
我有一个如下所示的数据框: column_1 column_2 2 3 6 4 5 5 . . . 我想为上述数据框的每一行返回该行中
我有一个由 3 列和 n 行组成的数据框。 分组前我的数据框看起来像 Index Max_Mass (kg/m) Max_Diameter (m) 1 10
我正在尝试计算夏季金牌数和冬季金牌数相对于金牌总数的最大差异。问题是我只需要考虑在夏季和冬季都至少赢得 1 枚金牌的国家。 Gold: Count of summer gold medals Gold
我有一个这样的数据框: A B C 0 1 2 1 1 3 -8 10 2 10 3 -20 3 50 7 1 我想根据每列中最大绝对值的索引重新排列它的列。
这个问题在这里已经有了答案: Pandas: Find index of the row with second highest value (2 个答案) 关闭 4 年前。 我有一个以 Count
这个问题在这里已经有了答案: Select the max row per group - pandas performance issue (2 个答案) 关闭 4 年前。 import time
我有一个看起来像这样的系列: delivery 2007-04-26 706 23 2007-04-27 705 10
我有一个包含一些财务数据的 python DataFrame,我正在尝试为其创建一些技术指标。我想弄清楚如何使用移动窗口函数来加速这个过程,而不是逐个元素地进行。对于每个索引,我想返回最近 30 天的
我有一个必须按三个级别分组的 DataFrame,然后返回最高值。每天每个唯一值都有一个返回,我想找到最高返回和细节。 data.groupby(['Company','Product','Indus
我正在尝试使用 df.loc[df.groupby(keys)['column'].idxmax()] 按最大值从组中选择行。 但是,我发现 df.groupby(keys)['column'].id
您好,我正在尝试了解 pd.DataFrame.idxmax 的效率,看看是否值得用可能更高效的自定义算法(例如,使用二进制搜索)替换它。 我想了解此方法背后的算法或至少了解其复杂性,但到目前为止我还
我有一个数据框,其中有两列,id 和 date。 df = pd.DataFrame([[1, '2019-05-20'], [1, '2019-05-20'], [1, '2018-04-23'],
我有一个数据框,其中有两列,id 和 date。 df = pd.DataFrame([[1, '2019-05-20'], [1, '2019-05-20'], [1, '2018-04-23'],
这是我的代码 from pandas import DataFrame, Series import pandas as pd import numpy as np income = DataFram
我发现 idxmax() 在 argmax() 不起作用的情况下有效(例如在整个数据帧上),但是在某些情况下我需要 argmax()?如果不是,我会把它从我的脑海中抹去。 最佳答案 有区别。 pd.D
Pandas dataframe.idxmax()函数返回请求轴上第一次出现最大值的索引。 有没有办法返回前 N 次出现的索引? 有问题的行: df2 = df.loc[df.groupby(['co
我是一名优秀的程序员,十分优秀!