Ich habe einen Datenrahmen, der wie dieser aussieht:erstellen, die auf ihrem Wert binäre Spalten in einem Datenrahmen von Zustand
df = pd.DataFrame(np.nan, index=[0,1,2,3], columns=['A','B','C'])
df.iloc[0,0] = 'a'
df.iloc[1,0] = 'b'
df.iloc[1,1] = 'c'
df.iloc[2,0] = 'b'
df.iloc[3,0] = 'c'
df.iloc[3,1] = 'b'
df.iloc[3,2] = 'd'
df
out : A B C
0 a NaN NaN
1 b c NaN
2 b NaN NaN
3 c b d
Und ich mag die Namen, um es neue Spalten hinzuzufügen sind die Werte innerhalb des Datenrahmens (hier 'a'
, 'b'
, 'c'
und 'd'
). Diese Spalten sind binär und geben an, ob die Werte 'a'
, 'b'
, 'c'
und 'd'
in der Zeile stehen.
In einem Bild, der Ausgang Ich mag würde, ist:
A B C a b c d
0 a NaN NaN 1 0 0 0
1 b c NaN 0 1 1 0
2 b NaN NaN 0 1 0 0
3 c b d 0 1 1 1
Um dies zu tun, ich erstellen Sie zuerst die mit Nullen gefüllt Spalten:
cols = pd.Series(df.values.ravel()).value_counts().index
for col in cols:
df[col] = 0
(Es schafft nicht die Spalten in der richtigen Reihenfolge, aber das spielt keine Rolle)
Dann ... ich habe eine Schleife über die Zeilen und Spalten verwendet ...
for row in df.index:
for col in cols:
if col in df.loc[row].values:
df.ix[row,col] = 1
Sie erhalten, warum ich nach einer anderen Möglichkeit suche, es zu tun, auch wenn mein Datenrahmen relativ klein ist (76k Zeilen), dauert es immer noch etwa 8 Minuten, was viel zu lang ist.
Irgendeine Idee?
Sie suchen 'get_dummies'. – IanS