2016-08-29 5 views
1

Können sagen, ich folgenden Datenrahmen habe:Gruppierung in der Nähe Daten in Pandas

df = pd.DataFrame({'a':[1,1.1,1.03,3,3.1], 'b':[10,11,12,13,14]}) 

df 
     a b 
0 1.00 10 
1 1.10 11 
2 1.03 12 
3 3.00 13 
4 3.10 14 

Und ich mag Gruppe in der Nähe gelegene, zum Beispiel.

df.groupby(#SOMETHING).mean(): 

      a  b 
a     
0 1.043333 11.0 
1 3.050000 13.5 

Nun könnte ich

#SOMETHING = pd.cut(df.a, np.arange(0, 5, 2), labels=False) 

verwenden, aber nur, wenn ich die Grenzen vorher wissen. Wie kann ich ein ähnliches Verhalten erreichen, wenn ich nicht weiß, wo ich die Schnitte platzieren soll? dh. Ich möchte in der Nähe liegende Punkte gruppieren (wobei in der Nähe definiert wird, dass sie innerhalb eines Epsilons liegen).

Ich weiß, dass dies nicht trivial ist, weil Punkt x in der Nähe von Punkt y sein könnte und Punkt y in der Nähe von Punkt z sein könnte, aber Punkt x könnte zu weit z sein; also dann ist es mehrdeutig, was zu tun ist - das ist ein k-Mittel-Problem, aber ich frage mich, ob Pandas irgendwelche Werkzeuge eingebaut haben, um dies einfach zu machen.

Anwendungsfall: Ich habe mehrere Prozesse, die Daten in regelmäßigen Intervallen generieren, aber sie sind nicht ganz synchronisiert, so dass die Zeitstempel sind nah, aber nicht identisch, und ich möchte ihre Daten aggregieren.

+0

'Dies ist eine Art von einem k-means problem' - na ja generell ein Clustering Problem. Warum nicht einen Clustering-Algorithmus verwenden? – cel

+0

Nun, ich denke, es könnte nur Overkill sein. Wenn es eine einfache Möglichkeit gibt, z.B. df.a.diff()> 1 zu verwenden, wäre es viel einfacher. – sheridp

+0

'df.a.diff()> 1, es wäre viel einfacher' - ja, aber das hängt von Ihren Daten ab. Das können wir für Sie nicht erraten. Du musst es anschauen und sehen. Aber seien Sie sich bewusst, dass diese Lösung nicht gut verallgemeinert werden kann. – cel

Antwort