gpt4 book ai didi

pandas groupby 聚合,总和在底部

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

这是我的代码:

import StringIO
from pandas import *
import numpy as np

df = read_csv(StringIO.StringIO('''Col1 Col2 A B
A D 1 6
A E 2 7
B D 3 8
B E 4 9
C D 5 19'''), delimiter='\t')


df['buc1'] = cut(df['A'], bins = [0, 2, 6, 8])

aggFunc = {'A': sum,
'B': np.average
}

运行后:
df.groupby(['buc1']).agg(aggFunc)

我得到:
         A     B
buc1
(0, 2] 3 6.5
(2, 6] 12 12.0
(6, 8] NaN NaN

我的问题是:
  • 鉴于那里没有值,我如何摆脱底部 (6, 8] 存储桶?
  • 如何在底部添加总计行,如 Excel 中的数据透视表?

  • 例如:
    buc1    A   B
    (0, 2] 3 6.5
    (2, 6] 12 12
    Total 15 9.8

    请注意,第二列的总行将是平均值,而不是总和。

    最佳答案

    只需删除 na记录,您可以使用 .dropna()数据框方法。

    df['buc1'] = df['buc1'].astype(object) 
    result = df.groupby(['buc1']).agg(aggFunc).dropna()
    result


    A B
    buc1
    (0, 2] 3 6.5
    (2, 6] 12 12.0

    至于边际总数,理论上这应该有效:
    result_alternative = pd.pivot_table(df,index='buc1',
    aggfunc=aggFunc,
    values=['A','B'],
    margins=True)
    result_alternative

    A B
    buc1
    (0, 2] 3 6.5
    (2, 6] 12 12.0
    All 15 9.8

    但它引发了一个与 相关的错误,我认为这是一个 bug应该修复它,以便它可以在您的机器上运行(尽管我运行的是 0.17 版)

    同一个链接有一个与分类变量相关的解决方法——首先将它作为一个对象进行转换,上面的调用应该是好的。

    编辑:

    如果您想继续使用 groupby 语义,您可以添加一行总计,如下所示:
    rowtotal = result.sum()
    rowtotal.name = 'rowtotal'
    result.append(rowtotal)

    关于pandas groupby 聚合,总和在底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33374486/

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