gpt4 book ai didi

python - Pandas Question 创建两个聚合,其中一个是有条件创建的

转载 作者:行者123 更新时间:2023-12-01 00:57:26 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

label  val
a 0
b -1
b 0
b 1
a 1
b 1

我的目标是按标签列进行分组并获得两个聚合列。第一个显示每组中的行数(例如 a:2、b:4),第二个显示每组中 val = 1 的比例。在 pandas 中执行此操作的最佳方法是什么?

最佳答案

查找满足条件的列的比例相当于取 bool 系列的平均值。这使得它可以快速完成。由于 sdf 共享相同的索引,因此使用一个对另一个进行分组是完全可以的。

要获取列的多个聚合,请提供一个列表来指定您要执行的操作。

s = df.val.eq(1)
s.groupby(df.label).agg(['size', 'mean'])

# size mean
#label
#a 2 0.5
#b 4 0.5
<小时/>

当组的数量变大时,使用像这样的“技巧”可能比使用 lambda 更快,因为许多基本的 groupby 聚合都有 cythonized 版本性能极其出色。

# Create a sample df with 20,000 unique groups
df = pd.concat([df]*10000, ignore_index=True)
df['label'] = df.index//3

%%timeit
s = df.val.eq(1)
s.groupby(df.label).agg(['size', 'mean'])
#10.8 ms ± 300 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit
def portion(x): return (x.eq(1).sum())/len(x)
df.groupby('label').val.agg(['size', portion])
#7.93 s ± 82.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

关于python - Pandas Question 创建两个聚合,其中一个是有条件创建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56135208/

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