2017-09-08 2 views
0

Ich habe ein Streudiagramm von Volumen (X-Achse) gegen Preis (dMidP, Y-Achse) Streudiagramm, und ich möchte die X-Achse in 30 gleichmäßig verteilt Abschnitte teilen Für den gesamten Bereich und Durchschnitt der Werte, dann plotten Sie den Durchschnittswert Ie jedoch die roten Punkte enter image description herePython Binning: wie der Bereich zu erhöhen

, wenn ist = 30: nur die Handlung einen kleinen Bereich von x deckt bin=30

dann erhöhe ich ist bis 100 (die Leitung ist weniger glatt enter image description here

dann bis 500: enter image description here

wissen Sie, warum der Wechsel x Bereich

?

------------------ Aktualisierung ----------------------------- ------------

Code:

df = pd.DataFrame({'X' : np.log(TradeNa['Volume']), 'Y' : TradeNa['dMidP']}) 
data_cut = pd.cut(df.X, np.linspace(df.X.min(), df.X.max(), 30))   #we cut the data following the bins 
grp = df.groupby(by = data_cut)  #we group the data by the cut 

ret = grp.aggregate(np.mean)   #we produce an aggregate representation (median) of each bin 

plt.loglog(np.log(TradeNa['Volume']),TradeNa['dMidP'],'o') 
plt.loglog(ret.X,ret.Y,'r-') 

plt.show() 

enter image description here

+0

Bitte geben Sie Ihren Code in Ihre Fragen ein. Geben Sie an, welche Bibliothek Sie verwenden. – Lescurel

+0

fertig, danke für die Erinnerung an mich – bing

Antwort

0

pd.cut(df.X,bins) teilt Ihre Daten in etwa gleich Brocken.

Ich denke, für was Sie wollen, müssen Sie pd.cut(df.X, np.linspace(df.X.min(), df.X.max(), 30)) stattdessen tun.

+0

Ich glaube nicht, dass dieser Code hier funktioniert – bing

+0

Bitte erarbeiten Sie sich. –

+0

danke für Ihre Antwort. Bitte sehen Sie das Update der Frage – bing