2017-05-02 3 views
3

mit dem folgenden Datenrahmen,Konvertieren eines Python-Datenrahmens mit mehreren Zeilen in eine Zeile mit Python Pandas?

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) 

Ausgang:

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 

Wie diese Transformation erreichen?

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) 

Ausgang:

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 

Ich versuche es groupby verwenden, um zu erreichen, gilt, agg ...
Aber ich kann immer noch nicht, diese Transformation erreichen.

aktualisiert
Mein letzter Code:

df.drop_duplicates('device_id', keep='first').merge(df.drop_duplicates('device_id', keep='last'),on='device_id') 

I su79eu7k 's und A-Za-z ist Zeit und Mühe zu schätzen.
Worte sind nicht genug, um meine Dankbarkeit auszudrücken.

+0

Mögliche Duplikat von [Lang weiten Daten. Pandas] (http://stackoverflow.com/questions/34988040/long-to-wide-data-pandas) –

+0

Vielen Dank für eine weitere Antwort für mich. –

Antwort

4

Wenn Sie noch nach einer Antwort suchen

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

Sie erhalten

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

Gute Arbeit! Vielen Dank für Ihre Hilfe! –

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

vielen Dank! –

Verwandte Themen