2017-10-19 2 views
0

Ich habe einen Rahmen df wo Spalten sind ['date', 'float', 'int'] zu vereinfachen. Die Termine und Schwimmer sind nicht einzigartig, so ich gruppieren:Streudiagramm der gruppierten Zeitreihe Rahmen

dd = df.groupby(['date', 'float']).sum() 

Das Ding ist, ich brauche das Datum Index sampeln, die ich über

dd = dd.unstack().resample('B').last() 

sonst ohne Entstapeln wird fallen, es zu tun haben ein Level.

Nun, was ich tun möchte, ist eine Streuung des Rahmens mit "Datum" als x-Achse, "float" als y-Achse und "int" als die Größe der Punkte. Ich kämpfe darum, dies mit dem Rahmen zu erreichen, den ich jetzt habe. Vielleicht ist die Vorverarbeitung, die ich mache, die falsche Art und es gibt einen saubereren Weg, dies zu erreichen. Grüße,

+0

können Sie einige Dummy-Daten liefern, die Sie verwenden? – pansen

Antwort

1

Es gibt wahrscheinlich keine Notwendigkeit zu unstack. Sie können Ihre groupby und resample tun, während ein Datenrahmen in dem langen Format über reset_index Aufrechterhaltung: Danach

df.groupby(["date", "float"])\ 
    .sum()\ 
    .reset_index(-1)\ 
    .resample("B")\ 
    .last() 

, können Sie die normale ax.scatter Methode mit dem s Argument verwenden, die die Größe der Punkte definiert, wie folgt:

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

# mocking your dataframe 
dates = pd.date_range(start="2017-10-10", periods=20) 
values = np.random.random(20) 
sizes = np.random.randint(1, 80, 20) 

df = pd.DataFrame({"dates": dates, 
        "values": values, 
        "sizes": sizes}) 

# plot setup 
fig,ax= plt.subplots() 
fig.set_size_inches(15, 7) 

# scatter 
ax.scatter(x=df["dates"].values, 
      y=df["values"].values, 
      s=df["sizes"].values) 

# setting x axis bounds 
ax.set_xlim((df["dates"].min(), df["dates"].max())) 

enter image description here

+0

Vielen Dank. Ich muss immer noch an der Reindexierung im Allgemeinen arbeiten, da scheint die Macht der Pandas zu liegen! –

Verwandte Themen