Pandas bevölkern neuen dataframe Spalte auf Grundlage übereinstimmender Spalten in einer anderen dataframe
Ich habe eine df
enthält meine wichtigsten Daten, die mit einer million rows
. Meine wichtigsten Daten auch noch 30 columns
. Jetzt möchte ich eine weitere Spalte hinzufügen, um meine df
genannt category
. Die category
ist ein column
im df2
enthält rund 700 rows
und zwei andere columns
zu entsprechen, wird mit zwei columns
im df
.
Beginne ich mit der Einstellung ein index
im df2
und df
zu entsprechen, wird zwischen den Rahmen, aber einige der index
im df2
existiert nicht in df
.
Werden die verbleibenden Spalten in df2
genannt AUTHOR_NAME
und CATEGORY
.
Der entsprechenden Spalte in df
heißt AUTHOR_NAME
.
Einige der AUTHOR_NAME
im df
existiert nicht in df2
- und Umgekehrt.
Die Anweisung, die ich will, ist: wenn index
im df
Spiele mit index
im df2
und title
im df
Spiele mit title
im df2
fügen Sie category
zu df
ist, sonst hinzufügen NaN in category
.
Beispiel Daten:
df2
AUTHOR_NAME CATEGORY
Index
Pub1 author1 main
Pub2 author1 main
Pub3 author1 main
Pub1 author2 sub
Pub3 author2 sub
Pub2 author4 sub
df
AUTHOR_NAME ...n amount of other columns
Index
Pub1 author1
Pub2 author1
Pub1 author2
Pub1 author3
Pub2 author4
expected_result
AUTHOR_NAME CATEGORY ...n amount of other columns
Index
Pub1 author1 main
Pub2 author1 main
Pub1 author2 sub
Pub1 author3 NaN
Pub2 author4 sub
Wenn ich df2.merge(df,left_index=True,right_index=True,how='left', on=['AUTHOR_NAME'])
meine df
wird dreimal größer als es sein sollte.
Also dachte ich, vielleicht ist die Zusammenlegung der falsche Weg, um darüber zu gehen. Was ich bin wirklich versucht zu tun, ist mit df2
als lookup-Tabelle und zurück type
Werte df
je nachdem, ob bestimmte Bedingungen erfüllt sind.
def calculate_category(df2, d):
category_row = df2[(df2["Index"] == d["Index"]) & (df2["AUTHOR_NAME"] == d["AUTHOR_NAME"])]
return str(category_row['CATEGORY'].iat[0])
df.apply(lambda d: calculate_category(df2, d), axis=1)
Jedoch, dieses wirft mir einen Fehler:
IndexError: ('index out of bounds', u'occurred at index 7614')
on
und left_index/right_index
zusammen zu arbeiten. Vielleicht brauchen Sie on=['Index', 'AUTHOR_NAME']
(oder so ähnlich). Und ich nicht sicher, welche dataframe ist Links in df2.merge(df,...)
. Vielleicht brauchen Sie how="right"
oder pd.merge(left=df, right=df2, ...)
Für mehr Informationen über die verschiedenen Facetten und Funktionen von den merge-join, concat-API, werfen Sie bitte einen Blick auf Pandas Zusammenführen 101.
InformationsquelleAutor user3471881 | 2016-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Betrachten Sie die folgenden dataframes
df
unddf2
option 1
merge
option 2
join
beide Optionen Rendite
InformationsquelleAutor piRSquared
ANSATZ 1:
Könnten Sie
concat
statt und fallen die doppelten Werte in beidenIndex
undAUTHOR_NAME
Spalten kombiniert. Danach, verwenden Sieisin
für die überprüfung der Mitgliedschaft:Hinweis: Die Spalte
Index
wird davon ausgegangen, dass als index-Spalte sowohl für dieDF's
.ANSATZ 2:
Verwenden
join
nach der Einstellung der index-Spalte richtig angezeigt:Nun, es funktioniert für mich, obwohl. Haben Sie die entsprechenden Namen für die
DFs
und auch dieIndex
Spalte in beiden frames als der index?Überprüfen Sie bitte. Lassen Sie mich Bearbeiten Sie die post mit dem Namen von dir.Ja, die
Index
Spalte in beiden Bildern eingestellt als der index, und ich habe den passenden Namen fürDFs
Bitte versuchen Sie, einen vereinfachten Ansatz gezeigt, in der Sie auf Bearbeiten.
InformationsquelleAutor Nickil Maveli
Während die anderen Antworten hier geben sehr gute und elegante Lösungen für die gestellte Frage, die ich gefunden habe, eine Ressource, die beide beantwortet diese Frage auf eine sehr elegante Mode, sowie eine schöne, klare und einfache Reihe von Beispielen auf, wie das zu erreichen join/merge von dataframes, effektiv lehren LEFT, RIGHT, INNER-und OUTER-joins.
Join Und Merge-Pandas Dataframe
Ich ehrlich das Gefühl, jeder weitere Suchende nach diesem Thema wollen auch prüfen, seine Beispiele...
InformationsquelleAutor kiltannen
Können Sie versuchen, die folgenden. Es wird verschmelzen beide Datensätze auf die angegebene Spalte als Schlüssel.
InformationsquelleAutor Bhagabat Behera
Versuchen
InformationsquelleAutor NickTumi