2017-08-10 2 views
1

Ich habe eine df so dassPandas: convert jede Zeile zu einem <Spaltennamen, Zeilenwert> dict und fügen Sie als neue Spalte

  STATUS_ID    STATUS_NM 
0     1    A 
1     2    B 
2     3    C 
3     4    D 

Ich möchte eine Reihe auszuführen, indem wenden Sie einen Schlüssel zu erhalten, Wert Par für jede Zeile in einer separaten Spalte. Die endgültige df sollte

sein
     STATUS 
0     {STATUS_ID:1,STATUS_NM:A} 
1     {STATUS_ID:2,STATUS_NM:B} 
2     {STATUS_ID:3,STATUS_NM:C} 
3     {STATUS_ID:4,STATUS_NM:D} 

UPDATE: Ich habe versucht, df[cols].apply(pd.Series.to_dict, axis=1) und df[cols].apply(lambda x: x.to_dict(), axis=1) aber statt der tatsächlichen dict bekommen, erhalte ich <built-in method values of dict object at 0x00...

ich seine meine Version von Pandas glauben, dass das Problem verursacht . Dies wurde hier diskutiert - https://github.com/pandas-dev/pandas/issues/8735 So ist die Frage, ob es eine andere Möglichkeit gibt, die gleiche Operation unter Umgehung dieses Problems durchzuführen. Ich kann nicht meine Pandas Version 0,17

+0

:

[{'STATUS_ID': 1, 'STATUS_NM': 'A'}, {'STATUS_ID': 2, 'STATUS_NM': 'B'}, {'STATUS_ID': 3, 'STATUS_NM': 'C'}, {'STATUS_ID': 4, 'STATUS_NM': 'D'}] 

Sie können diese zu Ihrem Datenrahmen direkt zuordnen:

lst = [] for _, row in df[cols].iterrows(): lst.append({col: row[col] for col in cols}) 

Diese Liste erstellt Mit welchem ​​Teil kämpfst du? Wörterbuch definieren? Jede Reihe vom Tisch holen? Hinzufügen einer neuen Spalte? Entfernen der alten Spalten? Versuchen Sie, in Ihrer Frage so spezifisch wie möglich zu sein, damit wir Ihnen helfen können. –

+0

Bitte sehen Sie meine Updates. Danke – Fizi

+0

@Fizi Ich habe eine explizite Loop-Lösung hinzugefügt. Bitte prüfe. – ayhan

Antwort

6
df['STATUS'] = df.apply(pd.Series.to_dict, axis=1) 

df 
Out: 
    STATUS_ID STATUS_NM        STATUS 
0   1   A {'STATUS_NM': 'A', 'STATUS_ID': 1} 
1   2   B {'STATUS_NM': 'B', 'STATUS_ID': 2} 
2   3   C {'STATUS_NM': 'C', 'STATUS_ID': 3} 
3   4   D {'STATUS_NM': 'D', 'STATUS_ID': 4} 

aktualisieren Wenn in Ihrem realen Datenrahmen auch Sie anderen Spalten haben, können Sie die Spalten angeben, müssen Sie im Wörterbuch haben wollen.

cols = ['STATUS_ID', 'STATUS_NM'] 
df['STATUS'] = df[cols].apply(pd.Series.to_dict, axis=1) 

Eine Alternative wäre über den Datenrahmen Iterieren sein:

df['STATUS'] = lst 

+0

aus irgendeinem seltsamen Grund, wenn ich diese Operation mache, bekomme ich Fizi

+0

@Fizi Können Sie den Code posten, der diese Werte erzeugt hat? – ayhan

+0

kann ich aus proprietären Gründen nicht, aber wenn der hier bereitgestellte Code funktionieren sollte, dann werde ich schauen, was meine Ursache nicht funktioniert – Fizi

Verwandte Themen