2017-05-02 4 views
3

다음 dataframe를 갖는,python pandas를 사용하여 여러 행이있는 python 데이터 프레임을 하나의 행으로 변환 하시겠습니까?

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 's 및 A-ZA-Z의 시간과 노력을 평가
df.drop_duplicates('device_id', keep='first').merge(df.drop_duplicates('device_id', keep='last'),on='device_id') 

.
내 감사의 말만으로는 충분하지 않습니다. 당신은 여전히 ​​

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'] 

을 GROUPBY 사용하여 대답을 찾고 있다면

+0

가능한 복제를 얻을. 팬더] (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

대단히 감사합니다! –