2017-06-14 6 views

答えて

3

使用pivot_tableは、私がab列のインデックスで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() 

enter image description here


応答

データがこの場合のない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の組み合わせは重複していません。したがって、集約は行われませんでした。

+0

素晴らしい!しかし私のx軸(年)は "0.0 0.5 1.0 ... + 2.009e3"を示しています。年を表示するにはどのように変更できますか? – planaria

+0

@planaria私は自分の投稿を更新しました。 – piRSquared

+0

ありがとうございます。あなたは私のデータを保存する! – planaria

1

使用する場合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() 
+0

しかし、多くの{a、b}のペアがあります。私はgroupbyか何かを適用すべきではありませんか? – planaria

+0

はい、確かに、あなたは何年ものペアの数が必要ですか? 'df.groupby(' year ')[' a '、' b ']。size()。plot() 'のようなものですか? – jezrael

関連する問題