Нахождение индекса строки по ее порядковому номеру
Есть два датафрейма, у которых индексы не по-порядку и даже возможны пропуски в последовательности индексов.
Нужно найти все индексы строк обоих фреймов, которые удовлетворяют определенным условиям.
Часть моего кода:
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