2016-03-31 6 views
3

ユーザ入力に依存して、パンダのピボットテーブルを生成します。 1つの特殊なケースがあります。カラムには1つの属性しかありません。これは、データフレームの代わりにピボットテーブルの結果としてタイプのシリーズのデータ​​オブジェクトを生成するので、私は別の方法(IE。)にアクセスする必要があります。いくつかの方法があります、列の属性の数とは無関係に同じ結果を得る方法はありますか?パンダ1行ピボットテーブルはデータフレームの代わりにセリを返します

import pandas as pd 

data = {'attr1': {0: 2, 1: 1, 2: 14}, 'attr2': {0: 0, 1: 1, 2: 2},'metric1': {0: 3834557.25999999998, 1: 13251194.440, 2: 2868778.53}, 'metric2': {0: 7.2, 1: 4.0, 2: 7.5}} 

df = pd.DataFrame(data) 

tab1 = df.pivot_table(index=[], columns=["attr1"], values=['metric1', 'metric2']) 
if isinstance(tab1, pd.Series): 
    tab1 = pd.DataFrame(tab1).T 

print tab1.index 
print tab1.columns 
print tab1 

tab2 = df.pivot_table(index=[], columns=["attr1",'attr2'], values=['metric1','metric2']) 
if isinstance(tab2, pd.Series): 
    tab2 = pd.DataFrame(tab2).T 
print tab2.index 
print tab2.columns 
print tab2 

答えて

2

これは何ですか?

In [39]: df.pivot_table(index=[], columns=["attr1",'attr2'], values=['metric1','metric2']).reset_index() 
Out[39]: 
    level_0 attr1 attr2   0 
0 metric1  1  1 13251194.44 
1 metric1  2  0 3834557.26 
2 metric1  14  2 2868778.53 
3 metric2  1  1   4.00 
4 metric2  2  0   7.20 
5 metric2  14  2   7.50 
3

パンダ0.18はpd.Series.to_frame methodであることに注意してください。だから、あなたが使用することができる

df\ 
    .pivot_table(
     index=[], 
     columns=["attr1",'attr2'], 
     values=['metric1','metric2'])\ 
    .to_frame() 
+0

私はその新しい方法に気付かなかった! +1 – MaxU

+0

ありがとう!実際には、私はあなたの答えが好きです。しばらくの間アップグレードしない組織もたくさんあります。 –

+0

シリーズにはしばらくの間、 'to_frame'メソッドがありました。 –

関連する問題