python - 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 df
byyear
和key
, andmean_except_current_key
被定义为除与当前行相同的所有行之外的val
平均值。year
key
我希望我已经把这个问题说清楚了。但我想不通。我发现了这个问题。然而,它与我的不同。
谢谢你的帮助。
解决方案
不确定是否有更好的方法,但这里有一些使用多个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
推荐阅读
- javascript - 如何从 JavaScript 访问 Kotlin 对象
- html - Nested NgFor looping over an array of objects
- google-cloud-platform - GCP Deployment Manger not creating network peerings
- python - apache2 错误日志。对 '(null)' 调用 'site.addsitedir()' 失败,停止
- android - Kotlin Coroutines - Are nested coroutines the proper way to handle different threading within one coroutine?
- ios - Why do we override variables which were initially nil instead of simply setting them?
- python-3.x - 打印语句的 Python 3 向后兼容性
- excel - 具有日期范围的 SUMIFS ......但在 X 天之前和 X 天之后
- ruby-on-rails - 为什么 Rails 低级问题会导致模块丢失其常量?
- ms-access - Error setting variable to Null Value