使用动态条件对groupby进行平均以得出平均值

时间:2018-06-25 01:20:19

标签: python pandas pandas-groupby

我一直在使用条件搜索groupby,并发现了许多关于此的帖子。例如:Pandas: conditional group-specific computations

但是,我找不到将条件应用于自身的任何地方。就我而言,我想获取平均值(或计数或其他任何公式),但我找不到的是在动态条件下过滤数据集。

为了说明这一点,这是汇总的数据集:

ID | Seq | Total 
1  | 1   | 1
1  | 2   | 2
1  | 3   | 3
2  | 1   | 1
2  | 2   | 2
2  | 3   | 1

如果我想按ID进行均值分组,但要满足附加条件,即对于组内的每个记录,仅必须计算Seq较小的那些记录。这应该是结果

ID | Seq | Total | x
1  | 1   | 1     | 1 <-- mean of 1
1  | 2   | 2     | 1.5 <-- mean of 1 and 2
1  | 3   | 3     | 2 <-- mean of 1,2 and 3
2  | 1   | 1     | 1 <-- mean of 1
2  | 2   | 2     | 1.5 <-- mean of 1 and 2
2  | 3   | 1     | 1.33  < mean of 1, 2 and 1

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您似乎只是想获取expanding().mean()分组的ID列中的Total,例如:

In []:
df['x'] = df.groupby('ID')['Total'].expanding().mean().values
df

Out[]:
   ID  Seq  Total         x
0   1    1      1  1.000000
1   1    2      2  1.500000
2   1    3      3  2.000000
3   2    1      1  1.000000
4   2    2      2  1.500000
5   2    3      1  1.333333