gpt4 book ai didi

python - 执行 pandas groupby 操作的更快替代方案

转载 作者:太空狗 更新时间:2023-10-30 00:24:45 25 4
gpt4 key购买 nike

我有一个以名称 (person_name)、日期和颜色 (shirt_color) 作为列的数据集。

每个人在特定的一天都穿着特定颜色的衬衫。天数可以是任意的。

例如输入:

name  day  color
----------------
John 1 White
John 2 White
John 3 Blue
John 4 Blue
John 5 White
Tom 2 White
Tom 3 Blue
Tom 4 Blue
Tom 5 Black
Jerry 1 Black
Jerry 2 Black
Jerry 4 Black
Jerry 5 White

我需要找到每个人最常使用的颜色。

例如结果:

name    color
-------------
Jerry Black
John White
Tom Blue

我正在执行以下操作以获得结果,它工作正常但速度很慢:

most_frquent_list = [[name, group.color.mode()[0]] 
for name, group in data.groupby('name')]
most_frquent_df = pd.DataFrame(most_frquent_list, columns=['name', 'color'])

现在假设我有一个包含 500 万个唯一名称的数据集。执行上述操作的最佳/最快方法是什么?

最佳答案

Numpy 的 numpy.add.atpandas.factorize

这是为了快速。但是,我也尝试将其组织起来使其易于阅读。

i, r = pd.factorize(df.name)
j, c = pd.factorize(df.color)
n, m = len(r), len(c)

b = np.zeros((n, m), dtype=np.int64)

np.add.at(b, (i, j), 1)
pd.Series(c[b.argmax(1)], r)

John White
Tom Blue
Jerry Black
dtype: object

groupbysizeidxmax

df.groupby(['name', 'color']).size().unstack().idxmax(1)

name
Jerry Black
John White
Tom Blue
dtype: object

name
Jerry Black
John White
Tom Blue
Name: color, dtype: object

计数器

¯\_(ツ)_/¯

from collections import Counter

df.groupby('name').color.apply(lambda c: Counter(c).most_common(1)[0][0])

name
Jerry Black
John White
Tom Blue
Name: color, dtype: object

关于python - 执行 pandas groupby 操作的更快替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51975512/

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