Сначала вам нужно отфильтровать столбцы, которые вы хотите сравнить. В этом случае столбцы 0, 1 и 3 путем следующего сравнения df.iloc[row1,[0, 1, 3]] == df.iloc[row2, [0, 1, 3]]
. Это возвращает массив значений True или False. Но вам нужно, чтобы все столбцы были одинаковыми. Чтобы подтвердить, что вам нужен метод .all()
. Он возвращает true, только если все значения в массиве равны True. В итоге:
if (df.iloc[row1,identical_columns] == df.iloc[row2, identical_columns]).all():
И так как вам нужно перебирать каждую возможную комбинацию строк, хорошо подойдет двойной цикл for.
for row1 in range(m-1):
for row2 in range(row1+1, m):
# Check for every row combinaton if the columns are equal
if (df.iloc[row1,identical_columns] == df.iloc[row2, identical_columns]).all():
pass
Всего:
import numpy as np
import pandas as pd
df = pd.DataFrame(data=np.random.randint(0, 100, (10, 4)))
m = df.shape[0]
identical_columns = [0, 1, 3]
k = 4
# Force rows values to pass
df.iloc[2, :] = [3, 4, 5, 1]
df.iloc[3, :] = [3, 4, 4, 1]
for row1 in range(m-1):
for row2 in range(row1+1, m):
# Check for every row combinaton if the columns are equal
if (df.iloc[row1,identical_columns] == df.iloc[row2, identical_columns]).all():
if df.iloc[row1,2] - df.iloc[row2,2] <= k:
# TODO: Implement Your logic
print ('We pass!')
else:
print(f"row {row1} and row {row2} don't pass")