2017-10-19 12 views
0

簡素化するために列が['日付'、 '浮動小数点'、 '整数'であるフレームdfがあります。グループ化された時系列フレームの散布図

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

事があり、私はそれがドロップされますアンスタッキングすることなく、それ以外の場合は

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

経由しなければならない日付インデックスを、リサンプリングする必要があります。 日付と山車が私のグループにそれらを一意ではありませんレベル。

ここでは、「日付」をx軸、floatをy軸、「int」をドットのサイズとするフレームの散布図をプロットします。 私は今持っているフレームでこれを達成するのに苦労しています。 私が行う前処理は間違った種類であり、これを達成するためのよりクリーンな方法があります。 よろしくお願いします。

+0

あなたが使用しているいくつかのダミーデータを提供することはできますか? – pansen

答えて

1

おそらくunstackは必要ありません。長い形式のデータフレームを維持しながら、あなたはreset_indexを経由してあなたのgroupbyresampleを行うことができます。

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

、次のように、ドットのサイズを定義s引数で、通常のax.scatterメソッドを使用することができます。

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

ありがとうございました。私はまだパンダの力があると思われるので、一般的に再索引付けを回避する必要があります! –

関連する問題