Code: Select all
data = {'values': [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
'type':['A','B','A','B','A','B','A','B','A','B','A','B','A','B','A'],
'type2':['C','D','C','D','C','D','C','D','C','D','C','D','C','D','C']}
df = pd.DataFrame(data)
window_size = 3
df['mean'] = (df.groupby(['type','type2'])['values'].rolling(window=3).mean().reset_index(drop=True))
print(df)
< /code>
Ausgabe: < /p>
values type type2 mean
0 1 A C NaN
1 2 B D NaN
2 3 A C 3.0
3 4 B D 5.0
4 5 A C 7.0
5 6 B D 9.0
6 7 A C 11.0
7 8 B D 13.0
8 9 A C NaN
9 10 B D NaN
10 11 A C 4.0
11 12 B D 6.0
12 13 A C 8.0
13 14 B D 10.0
14 15 A C 12.0
< /code>
Was ich brauche: < /p>
values type type2 mean
0 1 A C 1
1 2 B D 2
2 3 A C 2
3 4 B D 3
4 5 A C 3
5 6 B D 4
6 7 A C 5
7 8 B D 6
8 9 A C 7
9 10 B D 8
10 11 A C 9
11 12 B D 10
12 13 A C 11
13 14 B D 12
14 15 A C 13
< /code>
Die Anforderung ist sehr einfach. Der Mittelwert muss in den Gruppen kalkluiert werden. Die letzte Reihe ist also Group (a, c). Es ist also 15+ 13 (vorher) + 11 (vor dem vorherigen, weil das Fenster 3 ist) = 39/3 = 13 < /p>
gleich für andere Zeilen.df['mean'] = (df.groupby(['type','type2'])['values'].rolling(window=3).mean().reset_index(level=0,drop=True))
< /code>
raised in MultiIndex.from_tuples, see test_insert_error_msmgs
12690 if not value.index.is_unique:
12691 # duplicate axis
12692 raise err
12693
> 12694 raise TypeError(
12695 "incompatible index of inserted column with frame index"
12696 ) from err
12697 return reindexed_value, None
TypeError: incompatible index of inserted column with frame index