{a、b}ペアの年間使用量の折れ線グラフをプロットします。パンダを使用して年単位のデータセットをプロットするにはどうすればよいですか?
X軸は年、y軸は使用率である必要があります。
ここは私のデータセットです。
a b year usage
a2 10104 2011 7.292787
a0 10104 2012 43.545533
b0 12011 2009 96.130359
b1 12011 2009 7.658487
b1 14102 2010 6.975572
{a、b}ペアの年間使用量の折れ線グラフをプロットします。パンダを使用して年単位のデータセットをプロットするにはどうすればよいですか?
X軸は年、y軸は使用率である必要があります。
ここは私のデータセットです。
a b year usage
a2 10104 2011 7.292787
a0 10104 2012 43.545533
b0 12011 2009 96.130359
b1 12011 2009 7.658487
b1 14102 2010 6.975572
使用pivot_table
は、私がa
とb
列のインデックスでyear
の組み合わせを有するようにデータを再配置します。
ただし、ピボットするとデータが失われることがあります。 index
パラメータでinterpolate
を使用することにより、インデックス値の相対的な変化に比例関係を維持しながら、補間された値で欠落したデータを埋めます。インデックス値が均一に分離されていない場合は、たとえば[2005, 2006, 2008]
のようになります。インデックスが均等に分離されている場合は、index
を使用すると、デフォルトと同じになるので害はありません。 @ jezraelのコメントに
d1 = df.pivot_table('usage', 'year', ['a', 'b']).interpolate('index')
d1.index = pd.PeriodIndex(d1.index, freq='A')
d1.plot()
応答
データがこの場合のないinterpolate
d1 = df.pivot_table('usage', 'year', ['a', 'b'])
d1.index = pd.PeriodIndex(d1.index, freq='A')
d1
a a0 a2 b0 b1
b 10104 10104 12011 12011 14102
year
2009 NaN NaN 96.130359 7.658487 NaN
2010 NaN NaN NaN NaN 6.975572
2011 NaN 7.292787 NaN NaN NaN
2012 43.545533 NaN NaN NaN NaN
どのように見えるかを観察することが有益である、我々ドン'何が起こるか見る。しかし私は、疎なデータの間にギャップがあることがわかったところではるかに多くのデータがあると想像しました。順方向充填の代わりに、比例充填することもできます。
d1 = df.pivot_table('usage', 'year', ['a', 'b']).interpolate('index')
d1.index = pd.PeriodIndex(d1.index, freq='A')
d1
a a0 a2 b0 b1
b 10104 10104 12011 12011 14102
year
2009 NaN NaN 96.130359 7.658487 NaN
2010 NaN NaN 96.130359 7.658487 6.975572
2011 NaN 7.292787 96.130359 7.658487 6.975572
2012 43.545533 7.292787 96.130359 7.658487 6.975572
これもまた、より多くのデータでのみ有効です。このデータと同様に、我々は限られた順方向充填を観察することになる。 index/column
仕様内の重複がある場合、私はpivot_table
、物事のいずれかを使用mean
注pivot_table
ハンドルについて
です。それはaggfunc
でそのセルに入るすべての値を集計します。デフォルトでは、関数はmean
です。ただし、この場合、提示されたデータごとに、a/b/year
の組み合わせは重複していません。したがって、集約は行われませんでした。
使用する場合year
対ペアで重複なしa, b
:
s = df.set_index(['year','a','b'])['usage']
.unstack([1,2])
.sort_index(axis=1)
.interpolate('index')
s.index = s.index.astype(str)
s.plot()
素晴らしい!しかし私のx軸(年)は "0.0 0.5 1.0 ... + 2.009e3"を示しています。年を表示するにはどのように変更できますか? – planaria
@planaria私は自分の投稿を更新しました。 – piRSquared
ありがとうございます。あなたは私のデータを保存する! – planaria