2017-05-02 11 views
3

次のデータフレームを持つ、複数の行を持つpythonデータフレームをpython pandasを使用して1つの行に変換しますか?

df = pd.DataFrame({'device_id' : ['0','0','1','1','2','2'], 
       'p_food' : [0.2,0.1,0.3,0.5,0.1,0.7], 
       'p_phone' : [0.8,0.9,0.7,0.5,0.9,0.3] 
       }) 
print(df) 

出力:

device_id p_food p_phone 
0   0  0.2  0.8 
1   0  0.1  0.9 
2   1  0.3  0.7 
3   1  0.5  0.5 
4   2  0.1  0.9 
5   2  0.7  0.3 

どのようにこの変換を達成するには?

df2 = pd.DataFrame({'device_id' : ['0','1','2'], 
        'p_food_1' : [0.2,0.3,0.1], 
        'p_food_2' : [0.1,0.5,0.7], 
        'p_phone_1' : [0.8,0.7,0.9],      
        'p_phone_2' : [0.9,0.5,0.3] 
        }) 
print(df2) 

出力:

device_id p_food_1 p_food_2 p_phone_1 p_phone_2 
0   0  0.2  0.1  0.8  0.9 
1   1  0.3  0.5  0.7  0.5 
2   2  0.1  0.7  0.9  0.3 

私はAGG、それが適用され、GROUPBYを使う達成しようとする...
しかし、私はまだこの変換を達成することはできません。

更新
私の最終的なコード:

私は su79eu7k年代と A-ZA-Zの時間と努力を高く評価し
df.drop_duplicates('device_id', keep='first').merge(df.drop_duplicates('device_id', keep='last'),on='device_id') 


私の感謝の言葉は言葉では十分ではありません。

+0

可能な複製を取得GROUPBY

df = df.groupby('device_id')['p_food', 'p_phone'].apply(lambda x: pd.DataFrame(x.values)).unstack().reset_index() df.columns = df.columns.droplevel() df.columns = ['device_id','p_food_1', 'p_food_2', 'p_phone_1','p_phone_2'] 

を使用して答えを探している場合。パンダ](http://stackoverflow.com/questions/34988040/long-to-wide-data-pandas) –

+0

ありがとう、私には別の答えを提供していただきありがとうございます。 –

答えて

4

あなたはまだあなたは[ロングワイドデータへの

device_id p_food_1 p_food_2 p_phone_1 p_phone_2 
0 0   0.2   0.1   0.8   0.9 
1 1   0.3   0.5   0.7   0.5 
2 2   0.1   0.7   0.9   0.3 
+0

いい仕事です! ありがとうございます! –

2
df_m = df.drop_duplicates('device_id', keep='first')\ 
     .merge(df, on='device_id')\ 
     .drop_duplicates('device_id', keep='last')\ 
     [['device_id', 'p_food_x', 'p_food_y', 'p_phone_x', 'p_phone_y']]\ 
     .reset_index(drop=True) 

print(df_m) 

    device_id p_food_x p_food_y p_phone_x p_phone_y 
0   0  0.2  0.1  0.8  0.9 
1   1  0.3  0.5  0.7  0.5 
2   2  0.1  0.7  0.9  0.3 
+0

ありがとう! –

関連する問題