Wie gruppieren Sie sich auf mehreren Spalten und behalten den ursprünglichen Index in einem PANDAS -Datenrahmen bei?Python

Python-Programme
Anonymous
 Wie gruppieren Sie sich auf mehreren Spalten und behalten den ursprünglichen Index in einem PANDAS -Datenrahmen bei?

Post by Anonymous »

Ich muss mehrere Spalten auf einem Datenrahmen gruppieren und den Rollmittelwert in der Gruppe berechnen. Der ursprüngliche Index muss jedoch erhalten werden.

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
Wie kann man diese einfache Anforderung vornehmen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post