2017-05-24 6 views
2

パンダを使用していくつかのカテゴリの データを展開しようとしています(正しい単語であるかどうかはわかりません)。パンダの列名から列名にカテゴリを展開します

のは、私は、次のデータフレームを持っているとしましょう:

 apple day name oranges 
    0  5 a john  10 
    1  4 b john  23 
    2  1 a louis  15 
    3  3 b louis  5 

が、私はこのようなテーブルを生成するために、いくつかのパンダメソッドを使用したい:このテーブルを作成

df = pandas.DataFrame({'name': ['john', 'john', 'louis', 'louis'], 
         'day':['a', 'b', 'a', 'b'], 'oranges':[10, 23, 15, 5], 
         'apple': [5, 4, 1, 3]}) 

apple_a apple_b name oranges_a oranges_b 
0  5  4 john   10   23 
1  1  3 louis  15   5 

これまでのところ私は試しました:

df.pivot('name', columns='day') 

     apple  oranges 
    day  a b  a b 
    name 
    john  5 4  10 23 
    louis  1 3  15 5 

質問:私のデータを分割し、Pandasを使用してカテゴリ別情報に基づいて列を追加するにはどうすればよいですか?事前に

おかげで、

Rhenan

答えて

2

あなたは既に所望の出力を持っている、あなたは、列名

df = df.pivot('name', columns='day') 
df.columns = ['_'.join(col).strip() for col in df.columns.values] 
df = df.reset_index() 

    name apple_a apple_b oranges_a oranges_b 
0 john 5  4  10   23 
1 louis 1  3  15   5 
2

だが、その後mapjoinを使用してACシングルレベルまでそのマルチインデックス列をマッピング​​、stackunstackを使用してみましょう:

df.set_index(['name','day']).stack().unstack([2,1]) 
df_1.columns = df_1.columns.map('_'.join) 
print(df_1) 

出力:

 apple_a oranges_a apple_b oranges_b 
name           
john   5   10  4   23 
louis  1   15  3   5 
1

は非常にあなたのすべてに感謝フォーマットする必要があります! は、あなたの回答に基づいて、私は、トリックを行うコードを持っている:

n_df = df.pivot('name', columns='day') 
n_df.columns = n_df.columns.map('_'.join) 

出力:再び

 apple_a apple_b oranges_a oranges_b 
    name 
    john  5  4   10   23 
    louis  1  3   15   5 

感謝を!

+0

両方のソリューションから最高のものを選んでみませんか? +1 –

+1

それはあなたのために働いた偉大な、答えを受け入れることを忘れないでください。マルチインデクスカラムをシングルレベルにマッピングする@ ScottBostonのソリューションははるかに優れているので、私はそれに行きます。 – Vaishali