Ich möchte die Werte der Spalten „q1_body“ und „q2_body“ von Datenrahmen „Ergebnis“ mit den Werten der „Körper“ von der gleichen ID in Datenrahmen „df“ ersetzen, und der Code ist wie:Wie ersetzt man Werte in einem Datenrahmen mit Werten in einem anderen Datenrahmen basierend auf bestimmten Bedingungen?
def replace_body(x):
id1 = result.loc[x].qid1
result.loc[x].q1_body = df[df["qid"]==id1]["body"]
id2 = result.loc[x].qid2
result.loc[x].q2_body = df[df["qid"]==id2]["body"]
result.index.map(lambda x: replace_body(x))
Wenn ich den Code ausführen bekam ich die folgende Erinnerung in meiner ipython Konsole und das Programm gerade hier fest:
//anaconda/lib/python3.6/site-packages/pandas/core/generic.py:3110:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrameSee the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
self[name] = value
Hoffnung jemand kann mir sagen, was hier nicht stimmt.
die beiden Datenrahmen Angenommen sind:
Ergebnis:
qid1 q1_body qid2 q2_body
1a abc 2a bcd
1a abc 3a cde
2a bcd 3a cde
df:
qid body
1a sfgaks
2a shdfjk
3a adjkwf
Und die erwartete Ausgabe ist wie:
Ergebnis:
Hier 210
Warum map? "loc" würde tun, wie ich in meiner Antwort geschrieben habe. Einzige Sache, ich habe vergessen, den Index auf 'df' zu setzen ... Ups! :-P – Kartik
'map' ist besser und offensichtlicher Weg für die Zuordnung von Daten. – jezrael
Langsamer als '.loc'. Machen wir einen Zeittest, sollen wir? – Kartik