首页 > 解决方案 > groupby 条件均值

问题描述

例如,这是一个 DataFrame:

df = pd.DataFrame({'year': ['2019', '2019', '2019', '2019', '2020', '2020', '2020'],
                   'key': ['a', 'a', 'b', 'c', 'd', 'e', 'f'],
                   'val': [3, 4, 3, 5, 6, 1, 2]})

看起来像

    year    key val
0   2019    a   3
1   2019    a   4
2   2019    b   3
3   2019    c   5
4   2020    d   6
5   2020    e   1
6   2020    f   2

我想要得到的是

year  key    mean_except_current_key
2019  a      4
      b      4
      c      3.33
2020  d      1.5
      e      4
      f      3.5

也就是说,group dfbyyearkey, andmean_except_current_key被定义为除与当前行相同的所有行之外的val平均值。yearkey

我希望我已经把这个问题说清楚了。但我想不通。我发现了这个问题。然而,它与我的不同。

谢谢你的帮助。

标签: pythonpandaspandas-groupby

解决方案


不确定是否有更好的方法,但这里有一些使用多个groupby和的简单数学transform

x = df.groupby("year")["val"].transform(sum)- df.groupby(["year","key"])["val"].transform(sum)
y = df.groupby("year")["key"].transform("count").sub(df.groupby(["year","key"])["val"].transform("count"))
df["new"] = x/y
print (df)

   year key  val       new
0  2019   a    3  4.000000
1  2019   a    4  4.000000
2  2019   b    3  4.000000
3  2019   c    5  3.333333
4  2020   d    6  1.500000
5  2020   e    1  4.000000
6  2020   f    2  3.500000

推荐阅读