首页 > 解决方案 > Pandas 按组的条件平均

问题描述

更新:

在这篇文章中,第一个答案也非常接近解决这个问题。但是,它没有考虑 A 列和 C 列。

Python中的Pandas Average If:将groupby均值与条件语句相结合


有一个 3 列的 DataFrame。我想添加 2 个新列,它们是:

对于第二部分,我有日期和序列,可以用作滚动平均计算的基础。

有任何想法吗?

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

标签: pandasdataframeaverage

解决方案


使用惰性组:

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

推荐阅读