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)
?阅读