pandas - Pandas 按组的条件平均
问题描述
更新:
在这篇文章中,第一个答案也非常接近解决这个问题。但是,它没有考虑 A 列和 C 列。
Python中的Pandas Average If:将groupby均值与条件语句相结合
有一个 3 列的 DataFrame。我想添加 2 个新列,它们是:
- A 和 C 对 B 的滚动平均值(通过语句的当前行和上一行的滚动 2 - 相同的 A 和 C)
- A 和 C 对 B 的滚动平均值(前 2 个通过语句的滚动 2 个 - 相同的 A 和 C)
对于第二部分,我有日期和序列,可以用作滚动平均计算的基础。
有任何想法吗?
df = pd.DataFrame({'A': ['t1', 't1', 't1', 't1', 't2', 't2', 't2', 't2','t1'],
'B': [100, 104, 108, 110, 102, 110, 98, 100, 200],
'C': ['h', 'a', 'a', 'a', 'a', 'h', 'h', 'h','h'],
'expected1': [100, 104, 106, 109, 102, 110, 104, 99, 150],
'expected2': [0, 0, 104, 106, 0, 0, 110, 104, 100]}, columns=['A', 'B', 'C','expected1','expected2'])
df
解决方案
使用惰性组:
grp = df.groupby(['A', 'C'], sort=False)['B']
df['mean'] = grp.transform('mean')
df['mean_avg'] = grp.rolling(2, min_periods=1).mean().values
输出:
>>> df
A B C mean mean_avg
0 t1 100 h 100.000000 100.0
1 t1 104 a 107.333333 104.0
2 t1 108 a 107.333333 106.0
3 t1 110 a 107.333333 109.0
4 t2 102 a 102.000000 110.0
5 t2 110 h 102.666667 104.0
6 t2 98 h 102.666667 99.0
7 t2 100 h 102.666667 102.0
推荐阅读
- python - 如何使用 python(最好是 BS4)从 Google 图片(或 bing)中找到图片的 url?
- javascript - 如何在反应中从firebase cloud firestore获取数据
- amazon-web-services - 注册 ECS Fargate 实例时 NLB 健康检查随机失败
- sql - 创建滚动期间
- python - 如何将连接的值连接到python中的新值
- f# - 在 F# 中,如何将 null 写入 Nullable
班员? - java - 单击事件时跳转到集合中的下一个项目
- azure-devops - .NET Core SDK 5.0.100 的 Nuget 还原失败
- pine-script - Change chart background daily
- wordpress - 网站更新后自动刷新页面