Нахождение индекса строки по ее порядковому номеру

Есть два датафрейма, у которых индексы не по-порядку и даже возможны пропуски в последовательности индексов.

Нужно найти все индексы строк обоих фреймов, которые удовлетворяют определенным условиям.

Часть моего кода:

for i in range(negative.shape[0]):
    for j in range (data.shape[0]):
            if negative.iloc[i]["CustomerID"] == data.iloc[j]["CustomerID"] and 
            negative.iloc[i]["StockCode"] == data.iloc[j]["StockCode"] and 
            negative.iloc[i]["Quantity"] == -data.iloc[j]["Quantity"]:
            n.append(())

и вот в переменной n я хочу получить кортежи из индексов строк, в которых условие выполнилось. То есть, как вариант n: [(234,564),(22,643),и т.д]

А вот подготовил срез данных:

a = {"Invoice":['C536383','C581484','C541433','C536391','C536391','C581490','C581568','C581569'],
 "StockCode":['35004C','23843','23166','22556','21984','23144','21258','20979'],
 "Quantity":[-1,-80995,-74215,-12,-24,-11,-5,-5],
 'CustomerID':[15311,16446,12346,17548,17548,14397,15311,17315]}
negative = pd.DataFrame(data=a, index=[154,540422,61624,235,236,540449,541715,541717])

b = {"Invoice":['581483','541431','573008','576236','546498','546498','546498','546498','536409'],
 "StockCode":['23843','23166','84077','22634','21523','48111','20685','48116','21326'],
 "Quantity":[80995,74215,4800,1,1,1,1,1,12],
 'CustomerID':[16446,12346,12901,13755,15493,15493,15493,15493,17908]}
data = pd.DataFrame(data=b, index=[540421,61619,421632,465502,118799,118801,118802,118804,518])

Ответы (1 шт):

Автор решения: splash58

пока нет образца данных, напишу такой лобовой вариант

import pandas as pd

df1 = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
df2 = pd.DataFrame({'a':[1,5,3,], 'b':[4,7,6,]})

df1['present'] = df1.set_index(['a', 'b']).index.isin(df2.set_index(['a', 'b']).index)
print(df1)
print(df1.present.all())

результат

   a  b  present
0  1  4     True
1  2  5    False
2  3  6     True

False
→ Ссылка