【问题标题】:how to calculate sum|mean|median for tail of each group when pandas data aggregated in pythonpython - 当pandas数据在python中聚合时,如何计算每组尾部的总和|平均值|中位数
【发布时间】:2018-09-05 11:02:43
【问题描述】:

我有类似以下的数据。这是熊猫数据框格式的数据。

A  B  C  D  E  F  G
1  1  2  3  1  4  2
1  1  2  4  5  6  7
1  1  2  3  2  3  2
1  1  2  4  5  6  7
2  1  2  3  2  3  4
2  1  2  3  4  3  3
2  1  2  4  5  6  7

这里 agg_lvl=['A','B','C']

当数据聚合到 agg_lvl 时,我想通过使用每组中的 tail(2) 记录来计算 G 变量的均值|中值|总和。

而我的预期输出是这样的:

均值的预期输出:

A  B  C  G
1  1  2  4.5
2  1  2   5

中位数和总和的输出也相同,但我们必须考虑中位数和总和值来代替均值。

为此,我尝试了以下代码,但没有得到预期的输出。

df.groupby(agg_lvl,as_index=False).tail(2).agg({'G':'mean'})

谁能帮我解决这个问题。

提前致谢。

【问题讨论】:

    标签: python pandas pandas-groupby tail


    【解决方案1】:

    使用GroupBy.transform 而不是agg 返回与tail 过滤的DataFrame 形状相同的新列:

    agg_lvl=['A','B','C']
    df = df.groupby(agg_lvl,as_index=False).tail(2)
    df['G'] = df.groupby(agg_lvl)['G'].transform('mean')
    print (df)
       A  B  C  D  E  F    G
    2  1  1  2  3  2  3  4.5
    3  1  1  2  4  5  6  4.5
    5  2  1  2  3  4  3  5.0
    6  2  1  2  4  5  6  5.0
    

    编辑:

    df = df.groupby(agg_lvl,as_index=False).tail(2).groupby(agg_lvl,as_index=False)['G'].mean()
    print (df)
       A  B  C    G
    0  1  1  2  4.5
    1  2  1  2  5.0
    

    【讨论】:

    • 我更新了我的预期输出,你能检查一次吗?
    • @neeraja - 需要再次聚合mean,检查已编辑的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2021-09-10
    • 2019-09-27
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多