gpt4 book ai didi

python - Pandas DataFrame 中的多步聚合

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

在 Pandas 中,如何对同一数据集进行多步骤/顺序聚合?就好像每个步骤都是下一步的“子查询”。

我可以在 SQL 中这样想:

SELECT x.A, COUNT(x.B) as B_COUNT, SUM(x.C_SUM) as C_SUM
FROM (
SELECT df.A, df.B, SUM(df.C) as C_SUM
FROM df
GROUP BY df.A, df.B
) x
GROUP BY x.A

在Python3.4和Pandas0.19.2中工作,我有一个像这样的数据框:

import pandas
import numpy

numpy.random.seed(1)
df = pandas.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : numpy.random.randn(8),
'D' : numpy.random.randn(8)})

我尝试聚合到 A、B 级别,然后处理该数据帧(即,然后它的索引是“C”,并且列“A”抛出 KeyError,因为它不在键列表中。

A_B_AGG = df.groupby(['A','B']).C.sum().to_frame()
A_B_AGG.keys()
#Index(['C'], dtype='object')
#Would like to do this, but throws KeyError
end_result = A_B_AGG.groupby('A').B.size()

最终,我应该得到一些看起来像......的东西

A    B_COUNT      C_SUM
bar 3 -3.986264
foo 3 2.945186

感谢您提供有关正确的 pandas 执行此操作的方法的任何指导!

最佳答案

您可以使用agg函数:

df.groupby('A').agg({'B': pandas.Series.nunique, 'C': 'sum'})

# C B
#A
#bar -3.986264 3
#foo 2.945186 3

我认为这与您的 SQL 查询等效的原因是,当您按 A 和 B 列进行分组时,每个 A 组中将不会有 B 的重复项。因此,A 分组的 B 的计数将与 A 分组的 B 的唯一计数相同;对于 C sum,子组的总和与组的总和相同。

<小时/>

这是你的sql查询的直接翻译,我认为逻辑上等同于上面的方法:

(df.groupby(['A', 'B']).C.sum().reset_index()
.groupby('A').agg({'B': 'count', 'C': 'sum'}))

# C B
# A
#bar -3.986264 3
#foo 2.945186 3

关于python - Pandas DataFrame 中的多步聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41389664/

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