У меня есть два фрейма данных, которые я хотел бы сравнить на равенство по строкам. Меня интересует вычисление количества строк, имеющих одинаковые значения для неприсоединенных атрибутов.
Например,
import pandas as pd
df1 = pd.DataFrame({'a': [1,2,3,5], 'b': [2,3,4,6], 'c':[60,20,40,30], 'd':[50,90,10,30]})
df2 = pd.DataFrame({'a': [1,2,3,5], 'b': [2,3,4,6], 'c':[60,20,40,30], 'd':[50,90,40,40]})
Я буду объединять эти два фрейма данных в столбце a
и b
. Есть две строки (первые две), которые имеют одинаковые значения для c
и d
в обоих кадрах данных.
В настоящее время я использую следующий подход, в котором я сначала соединяю эти два фрейма данных, а затем вычисляю значения каждой строки на равенство.
df = df1.merge(df2, on=['a','b'])
cols1 = [c for c in df.columns.tolist() if c.endswith("_x")]
cols2 = [c for c in df.columns.tolist() if c.endswith("_y")]
num_rows_equal = 0
for index, row in df.iterrows():
not_equal = False
for col1,col2 in zip(cols1,cols2):
if row[col1] != row[col2]:
not_equal = True
break
if not not_equal: # row values are equal
num_rows_equal += 1
num_rows_equal
Есть ли более эффективный (pythoni c ) способ добиться того же результата?