Ich versuche, Elemente in einem Datenrahmen zu vergleichen, die dieselben Werte, aber unterschiedliche Spaltenindizes haben.
data1 = {'foo': [1,2,3], 'bar': [4,5,6]}
data2 = {'foo': [1,2,50], 'boo': [4,5,6]}
data1 = pd.DataFrame(data1)
data2 = pd.DataFrame(data2)
Ich versuche, ein Skript zu schreiben, das die Werte der beiden Datenrahmen basierend auf dem Index vergleicht.
Die gewünschte Ausgabe ist:
same
same
different
same
same
same
Da ich verschiedene Spaltennamen behalten sollte, hier mein Code
#Input
for row in data1.index:
if data1.iloc[row, 0] == data2.iloc[row, 0]:
print('same')
else:
print('different')
Während ich die Spalte erfolgreich durchlaufen kann foo
, bin ich noch nicht in der Lage, durch bar
und zu iterieren boo
.
#Output
same
same
different
Wenn ich versuche, nur if data1.iloc[row]
beim Schneiden zu bleiben, wird Folgendes ausgegeben:ValueError: Can only compare identically-labeled Series objects
Haben Sie Vorschläge? Vielen Dank
Lösung des Problems
Unter der Annahme, dass die Abmessungen übereinstimmen, besteht eine Möglichkeit darin, Folgendes zu verwenden numpy.where
:
out = np.where(data1.to_numpy() == data2.to_numpy(), 'same','different').T.tolist()
Ausgabe:
[['same', 'same', 'different'], ['same', 'same', 'same']]
Sie könnten auch einen DataFrame erstellen:
out = pd.DataFrame(np.where(data1.to_numpy() == data2.to_numpy(), 'same','different'), columns=['first_column','second_column'])
Ausgabe:
first_column second_column
0 same same
1 same same
2 different same
Keine Kommentare:
Kommentar veröffentlichen