我有如下数据,它是熊猫数据帧格式。
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变量的均值| median | sum。
我的预期输出是这样的:
预期的平均值输出:
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'})
谁能帮我解决这个问题。
谢谢。
答案 0 :(得分:1)
使用GroupBy.transform
代替index
返回与agg
过滤的DataFrame具有相同形状的新列:
tail
编辑:
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