2017-12-18 2 views
-1

Ich habe 20 Spalten in einem Datenrahmen. I Liste 4 von ihnen hier als Beispiel:Wie erhält man die Prozentzahl basierend auf mehreren Spalten im Pandas Dataframe?

is_guarantee: 0 oder 1
Hotel_star: 0, 1, 2, 3, 4, 5
order_status: 40, 60, 80
Fahrt (Label): 0, 1, 2

is_guarantee hotel_star order_status journey 
0    0   5   60  0 
1    1   5   60  0 
2    1   5   60  0 
3    0   5   60  1 
4    0   4   40  0 
5    0   4   40  1 
6    0   4   40  1 
7    0   3   60  0 
8    0   2   60  0 
9    1   5   60  0 
10    0   2   60  0 
11    0   2   60  0 

Click to View Image

Aber das System müssen die Auftritts-Matrix wie das folgende Format Funktion zur Eingabe:

012.351.

Click to View Image

Kann irgendjemand helfen?

df1 = pd.DataFrame(index=range(0,20)) 
df1['is_guarantee'] = np.random.choice([0,1], df1.shape[0]) 
df1['hotel_star'] = np.random.choice([0,1,2,3,4,5], df1.shape[0]) 
df1['order_status'] = np.random.choice([40,60,80], df1.shape[0]) 
df1['journey '] = np.random.choice([0,1,2], df1.shape[0]) 
+1

Was haben Sie bisher versucht? –

+0

Ich möchte Ihre Daten in der Frage als _text_ bearbeitet sehen. Ich kann ein Bild nicht kopieren und in mein Terminal einfügen, und ich möchte es nicht von Grund auf neu eingeben. Machen Sie jedem das Leben leicht, posten Sie Ihre Daten und die erwartete Ausgabe in Ihrer Frage als Text. Keine Daten = keine Hilfe. –

+0

@jezrael ... Niemand ist hier, um dich zu verfolgen, am allerwenigsten ich. Ich habe dir gesagt, dass ich deine Kenntnisse respektiere. Leider tun Sie manchmal Dinge, die für die Website als ungesund angesehen werden könnten. Das ist nicht meine Meinung. Wie auch immer, ich habe die Frage wieder geöffnet, viel Spaß. –

Antwort

1

Ich glaube, Sie brauchen:

  • reshape von melt und zählt erhalten, indem groupby mit size, Umformen von unstack
  • dann teilen Summe pro Reihen und kommen MultiIndex-index:

df = (df.melt('journey') 
     .astype(str) 
     .groupby(['variable', 'journey','value']) 
     .size() 
     .unstack(1, fill_value=0)) 

df = (df.div(df.sum(1), axis=0) 
     .mul(100) 
     .add_prefix('journey_') 
     .set_index(df.index.map(' = '.join)) 
     .rename_axis(None, 1)) 

print (df) 

        journey_0 journey_1 
hotel_star = 2  100.000000 0.000000 
hotel_star = 3  100.000000 0.000000 
hotel_star = 4  33.333333 66.666667 
hotel_star = 5  80.000000 20.000000 
is_guarantee = 0 66.666667 33.333333 
is_guarantee = 1 100.000000 0.000000 
order_status = 40 33.333333 66.666667 
order_status = 60 88.888889 11.111111 
+0

vielen Dank! Lass mich es studieren:) – DataHolic

Verwandte Themen