Python 如何对组内的下n个值求平均值

Python 如何对组内的下n个值求平均值,python,pandas,Python,Pandas,使用以下数据 ex = {'id': {0: 12, 1: 7745, 2: 14190, 3: 12, 4: 7745, 5: 14190, 6: 12, 7: 7745, 8: 14190, 9: 12, 10: 7745, 11: 14190, 12: 12, 13: 7745, 14: 14190, 15: 12, 16: 7745, 17: 14190, 18: 12, 19: 7745, 20: 1419

使用以下数据

ex = {'id': {0: 12,
  1: 7745,
  2: 14190,
  3: 12,
  4: 7745,
  5: 14190,
  6: 12,
  7: 7745,
  8: 14190,
  9: 12,
  10: 7745,
  11: 14190,
  12: 12,
  13: 7745,
  14: 14190,
  15: 12,
  16: 7745,
  17: 14190,
  18: 12,
  19: 7745,
  20: 14190,
  21: 12,
  22: 7745,
  23: 14190,
  24: 12,
  25: 7745,
  26: 14190,
  27: 12,
  28: 7745,
  29: 14190,
  30: 12,
  31: 7745,
  32: 14190,
  33: 12,
  34: 7745,
  35: 14190,
  36: 12,
  37: 7745,
  38: 14190,
  39: 12,
  40: 7745,
  41: 14190,
  42: 12,
  43: 7745,
  44: 14190,
  45: 12,
  46: 7745,
  47: 14190,
  48: 12,
  49: 7745,
  50: 14190,
  51: 12,
  52: 7745,
  53: 14190,
  54: 12,
  55: 7745,
  56: 14190,
  57: 12,
  58: 7745,
  59: 14190},
 'id2': {0: 0,
  1: 0,
  2: 0,
  3: 1,
  4: 1,
  5: 1,
  6: 2,
  7: 2,
  8: 2,
  9: 3,
  10: 3,
  11: 3,
  12: 4,
  13: 4,
  14: 4,
  15: 5,
  16: 5,
  17: 5,
  18: 6,
  19: 6,
  20: 6,
  21: 7,
  22: 7,
  23: 7,
  24: 8,
  25: 8,
  26: 8,
  27: 9,
  28: 9,
  29: 9,
  30: 10,
  31: 10,
  32: 10,
  33: 11,
  34: 11,
  35: 11,
  36: 12,
  37: 12,
  38: 12,
  39: 13,
  40: 13,
  41: 13,
  42: 14,
  43: 14,
  44: 14,
  45: 15,
  46: 15,
  47: 15,
  48: 16,
  49: 16,
  50: 16,
  51: 17,
  52: 17,
  53: 17,
  54: 18,
  55: 18,
  56: 18,
  57: 19,
  58: 19,
  59: 19},
 'var1': {0: 60.57423361566744,
  1: 58.044840216178606,
  2: 51.29251700680272,
  3: 60.674455993946225,
  4: 58.21241610641044,
  5: 51.31371599732972,
  6: 60.77849708396439,
  7: 58.369465051911966,
  8: 51.33611104900928,
  9: 60.88625886689413,
  10: 58.516561288952005,
  11: 51.35969457224551,
  12: 60.99764332390786,
  13: 58.65427905379941,
  14: 51.38445897744256,
  15: 61.112552436177864,
  16: 58.78319258272294,
  17: 51.4103966750045,
  18: 61.230888184876434,
  19: 58.90387611199144,
  20: 51.43750007533549,
  21: 61.35255255117588,
  22: 59.01690387787371,
  23: 51.465761588839634,
  24: 61.4774475162485,
  25: 59.122850116638496,
  26: 51.49517362592107,
  27: 61.60547506126665,
  28: 59.222289064554694,
  29: 51.52572859698392,
  30: 61.736537167402595,
  31: 59.31579495789107,
  32: 51.55741891243228,
  33: 61.870535815828646,
  34: 59.40394203291643,
  35: 51.5902369826703,
  36: 62.00737298771711,
  37: 59.48730452589962,
  38: 51.624175218102074,
  39: 62.14695066424032,
  40: 59.56645667310938,
  41: 51.659226029131744,
  42: 62.289170826570604,
  43: 59.64197271081458,
  44: 51.69538182616348,
  45: 62.43393545588018,
  46: 59.714426875284005,
  47: 51.732635019601275,
  48: 62.58114653334144,
  49: 59.784393402786435,
  50: 51.770978019849345,
  51: 62.73070604012664,
  52: 59.85244652959075,
  53: 51.81040323731179,
  54: 62.88251595740815,
  55: 59.919160491965705,
  56: 51.85090308239276,
  57: 63.03647826635822,
  58: 59.98510952618012,
  59: 51.892469965496346},
 'var2': {0: 26.46961208868258,
  1: 25.02784060286349,
  2: 67.01680672268907,
  3: 26.362852053047188,
  4: 25.16250452630659,
  5: 67.20428262498875,
  6: 26.257170717779545,
  7: 25.25801378937902,
  8: 67.37902432665504,
  9: 26.15255739707393,
  10: 25.315898046471766,
  11: 67.5412758313266,
  12: 26.04900140512476,
  13: 25.33768695197584,
  14: 67.69128114264197,
  15: 25.946492056126274,
  16: 25.32491016028206,
  17: 67.82928426423972,
  18: 25.84501866427287,
  19: 25.27909732578149,
  20: 67.95552919975847,
  21: 25.74457054375889,
  22: 25.201778102865052,
  23: 68.07025995283685,
  24: 25.64513700877862,
  25: 25.094482145923664,
  26: 68.17372052711335,
  27: 25.546707373526395,
  28: 24.958739109348315,
  29: 68.26615492622662,
  30: 25.449270952196603,
  31: 24.796078647529914,
  32: 68.34780715381525,
  33: 25.35281705898356,
  34: 24.608030414859442,
  35: 68.41892121351782,
  36: 25.257335008081554,
  37: 24.396124065727854,
  38: 68.47974110897286,
  39: 25.162814113684988,
  40: 24.16188925452609,
  41: 68.53051084381906,
  42: 25.069243689988213,
  43: 23.906855635645105,
  44: 68.57147442169496,
  45: 24.976613051185442,
  46: 23.63255286347585,
  47: 68.60287584623913,
  48: 24.88491151147112,
  49: 23.340510592409263,
  50: 68.62495912109016,
  51: 24.79412838503955,
  52: 23.03225847683625,
  53: 68.63796824988664,
  54: 24.704252986085066,
  55: 22.70932617114788,
  56: 68.64214723626722,
  57: 24.615274628802,
  58: 22.373243329735022,
  59: 68.6377400838704}}
ex = pd.DataFrame(ex).set_index(['id', 'id2'])

我想为
id
中的每个值计算
var1
下n个值的平均值,其中“next”由
id2
定义。我知道存在
pd.Series.expansing
,我可以做类似
df.groupby('id')['var1'].transform(lambda x:x.expansing().mean())
的事情,但这将涉及每个
id
的所有20个元素,当我想将平均值限制到接下来的n个元素时(比如
n=5
)。如何做到这一点?

这应该可以做到:

print(例如,排序索引(升序=False)、groupby(“id”)[“var1”]、rolling(6,最小周期=1)、mean().reset索引(0,drop=True))
输出:

id2
12     19     63.036478
18     62.959497
17     62.883233
16     62.807712
15     62.732956
14     62.658992
13     62.510738
12     62.364880
11     62.221519
10     62.080750
9      61.942674
8      61.807387
7      61.674987
6      61.545573
5      61.419242
4      61.296093
3      61.176224
2      61.059732
1      60.946716
0      60.837274
7745   19     59.985110
18     59.952135
17     59.918906
16     59.885277
15     59.851107
14     59.816252
13     59.746476
12     59.674500
11     59.599749
10     59.521650
9      59.439627
8      59.353106
7      59.261514
6      59.164276
5      59.060818
4      58.950565
3      58.832944
2      58.707380
1      58.573298
0      58.430126
14190  19     51.892470
18     51.871687
17     51.851259
16     51.831189
15     51.811478
14     51.792129
13     51.753255
12     51.715467
11     51.678772
10     51.643179
9      51.608695
8      51.575327
7      51.543082
6      51.511970
5      51.481997
4      51.453170
3      51.425498
2      51.398987
1      51.373646
0      51.349482
名称:var1,数据类型:float64
[程序完成]
展开(6)
?阅读