2016-07-04 10 views
1

Ich habe eine Verteilung mit numpy Histogramm und digitalisieren Funktionen erstellt.Pandas Merge Bins

_, bins = np.histogram(x, bins=bins) 
arr = np.digitize(x, bins) - 1 
x = bins[arr[:]] 

Oder vielleicht:

x = pandas.cut(x, bins=bins) 

jedoch die Verteilung sehr verzerrt ist, auch nach Ausreißern zu entfernen, gibt es viele Behälter mit sehr wenig Beobachtungen. Ich möchte Bins verschmelzen, etwas ähnlich:

How to merge bins in R

Das Verfahren würde möglicherweise Pandas groupby beinhalten und dann die Gruppe verschmelzenden Größen von weniger als n zu ihren benachbarten Werten. Gibt es einen Weg, dies in Pandas/Numpy zu erreichen?

+0

Kannst du 'pd.cut' verwenden? –

+0

@ JonClements Ich glaube nicht, wie das in diesem Fall helfen kann – user113531

+0

Yeah war nicht sicher, ob Sie nur 'cut' verwenden und es die Anzahl der Bins, so dass Sie eine automatische Verteilung erhalten ... aber das wird nicht Arbeit, wenn Sie * Mülleimer definiert haben ... –

Antwort

1

Wie versprochen, habe ich etwas in physt implementiert, Version 0.3.5. Sie können es gerne verwenden.

Siehe http://nbviewer.jupyter.org/github/janpipek/physt/blob/master/doc/Binning2.ipynb#Merging-bins und besonders http://nbviewer.jupyter.org/github/janpipek/physt/blob/master/doc/Binning2.ipynb#By-min-frequency

In Ihrem Fall würde der Workflow so etwas wie diese:

import physt 
histogram = physt.h1(x, bins=bins) 
histogram.merge_bins(min_frequency=n) 
bins = histogram.numpy_bins 

Beachten Sie, dass der Code im Alpha-Stadium und nicht jeder Behälter enthält mehr als die erforderliche Mindest (um große enge Behälter zu bewahren). Der beste Algorithmus wird noch gesucht.

+0

Werde es ausprobieren! – user113531