GOOGLE ADS

Dienstag, 3. Mai 2022

Finden von Unterschieden zwischen Datenrahmen beim Iterieren eines Datenrahmenindex

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 barund 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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...