Es gibt auch Strategien, mit denen Sie dieses Verhalten vermeiden können, bei denen die duplizierten Daten nicht verloren gehen, wenn beispielsweise nicht alle Spalten dupliziert werden. Wenn Sie haben
In [1]: df = pd.DataFrame([[1, 3], [2, 4]], columns=['A', 'B'])
In [2]: df2 = pd.DataFrame([[1, 5], [1, 6]], columns=['A', 'C'])
Eine Möglichkeit wäre, den Mittelwert des Duplikats zu nehmen (kann auch die Summe usw. nehmen).
In [3]: df3 = df2.groupby('A').mean().reset_index()
In [4]: df3
Out[4]:
C
A
1 5.5
In [5]: merged = pd.merge(df,df3,on=['A'], how='outer')
In [6]: merged
Out[204]:
A B C
0 1 3 5.5
1 2 4 NaN
Wenn Sie nicht numerische Daten haben, die nicht mit pd.to_numeric () konvertiert werden können, oder wenn Sie einfach nicht den Mittelwert nehmen möchten, können Sie die Zusammenführungsvariable ändern, indem Sie die Duplikate auflisten. Diese Strategie würde jedoch angewendet, wenn die Duplikate in beiden Datensätzen vorhanden sind (was das gleiche problematische Verhalten verursachen würde und auch ein häufiges Problem darstellt):
In [7]: df = pd.DataFrame([['a', 3], ['b', 4],['b',0]], columns=['A', 'B'])
In [8]: df2 = pd.DataFrame([['a', 3], ['b', 8],['b',5]], columns=['A', 'C'])
In [9]: df['count'] = df.groupby('A')['B'].cumcount()
In [10]: df['A'] = np.where(df['count']>0,df['A']+df['count'].astype(str),df['A'].astype(str))
In[11]: df
Out[11]:
A B count
0 a 3 0
1 b 4 0
2 b1 0 1
Machen Sie dasselbe für df2, löschen Sie die Zählvariablen in df und df2 und führen Sie sie auf 'A' zusammen:
In [16]: merged
Out[16]:
A B C
0 a 3 3
1 b 4 8
2 b1 0 5
Ein paar Notizen. In diesem letzten Fall verwende ich .cumcount () anstelle von .duplicated, da es sein kann, dass Sie für eine bestimmte Beobachtung mehr als ein Duplikat haben. Außerdem verwende ich .astype (str), um die Zählwerte in Zeichenfolgen zu konvertieren, da ich den Befehl np.where () verwende, aber die Verwendung von pd.concat () oder etwas anderem kann unterschiedliche Anwendungen ermöglichen.
Wenn nur ein Datensatz die Duplikate enthält, Sie diese aber dennoch behalten möchten, können Sie die erste Hälfte der letzteren Strategie verwenden, um die Duplikate in der resultierenden Zusammenführung zu unterscheiden.