2017-11-07 3 views
0

Betrachten Sie die folgende Datenmenge:Gruppe innerhalb der Gruppe von in Pandas

min 5-min  a 
0  0  800 
0  0  801 
1  0  802 
1  0  803 
1  0  804 
2  0  805 
2  0  805 
2  0  810 
3  0  801 
3  0  802 
3  0  803 
4  0  804 
4  0  805 
5  1  806 
5  1  800 
5  1  890 
6  1  890 
6  1  880 
6  1  800 
7  1  804 
7  1  806 
8  1  801 
9  1  800 
9  1  900 
10  1  770 
10  1  803 
10  1  811 

I std eines für jede Gruppe berechnen muß auf der Grundlage der Minute und dann den Mittelwert der Ergebnisse Werte in jeder Gruppe von 5 berechnen Mindest. Ich weiß nicht, wie man die Grenze von 5 min findet, nach Berechnung von Std. Wie soll ich die Daten speichern, um zu wissen, welche Std zu jeder Gruppe von 5 min gehören?

data.groupby('minute').a.std() 

Ich würde über jede Hilfe freuen.

+0

Es wäre hilfreich, ein Beispiel für die erwartete Ausgabe zu veröffentlichen nur die Dinge zu klären. –

+0

Müssen diese Ergebnisse in den ursprünglichen Datenrahmen oder in separate Datenrahmen gespeichert werden? Sicherlich, nachdem Sie std berechnet und die Werte irgendwo gespeichert haben, dann wird jede fünfte Std. Einen Zeitraum von 5 Minuten bilden –

Antwort

2

nicht 100% klar, was Sie fragen ... aber ich denke, das ist, was Sie brauchen:

data.groupby(['min','5-min']).std().groupby('5-min').mean()

Dies findet die Standardabweichung auf Basis der 5-min Säule der Mittel berechnet basierend auf der Spalte 'min'.

1

Taskos Antwort ist großartig, aber ich war mir nicht sicher, ob Sie die Daten in den Datenrahmen zurückgeschoben werden oder nicht. Unter der Annahme, was Sie wollen, ist die neuen Spalten in der Mutter nach jedem groupby Betrieb hinzuzufügen, entschied Ive, dass für Sie zu tun als

import pandas as pd 

df = your_df 

# First we create the standard deviation column 

def add_std(grp): 
    grp['stdevs'] = grp['a'].std() 
    return grp 

df = df.groupby('min').apply(add_std) 

# Next we create the 5 minute mean column 

def add_meandev(grp): 
    grp['meandev'] = grp['stdevs'].mean() 
    return grp 

print(df.groupby('5-min').apply(add_meandev)) 

folgt, kann dieses eleganter gemacht werden, indem etc Verkettungs aber ich habe entschieden, es zu legen so aus, dass der zugrunde liegende Prozess für Sie sichtbarer ist.

Die endgültige Ausgabe von dieser wird wie folgt aussehen:

min 5-min a  stdevs meandev 
0  0  0 800 0.707107 1.345283 
1  0  0 801 0.707107 1.345283 
2  1  0 802 1.000000 1.345283 
3  1  0 803 1.000000 1.345283 
4  1  0 804 1.000000 1.345283 
5  2  0 805 2.886751 1.345283 
6  2  0 805 2.886751 1.345283 
7  2  0 810 2.886751 1.345283 
8  3  0 801 1.000000 1.345283 
9  3  0 802 1.000000 1.345283 
10 3  0 803 1.000000 1.345283 
11 4  0 804 0.707107 1.345283 
12 4  0 805 0.707107 1.345283 
13 5  1 806 50.318983 39.107147 
14 5  1 800 50.318983 39.107147 
15 5  1 890 50.318983 39.107147 
16 6  1 890 49.328829 39.107147 
17 6  1 880 49.328829 39.107147 
18 6  1 800 49.328829 39.107147 
19 7  1 804 1.414214 39.107147 
20 7  1 806 1.414214 39.107147 
21 8  1 801  NaN 39.107147 
22 9  1 800 70.710678 39.107147 
23 9  1 900 70.710678 39.107147 
24 10  1 770 21.733231 39.107147 
25 10  1 803 21.733231 39.107147 
26 10  1 811 21.733231 39.107147 
Verwandte Themen