在for循环中使用多个过滤条件,并在匹配后获取DataFrame的索引位置

时间:2018-08-03 15:20:54

标签: python pandas indexing

我有两个如下所示的DataFrame-
我想执行以下操作-

我想从DF-A列TOTAL_NO_OF_RECORDS中获取所有值,并希望与DF-B列-Records以及DF-A列TOTAL_QUANTITY进行检查,并希望与DF-B列-Quantity一起检查,如果得到匹配,我需要打印DF-A的索引位置。

话虽如此,请参阅

DF-A中的

行0 一个22142 309941.01

这与第二列中的DF-B匹配

22142 309941.01

因此,O / P为:0(DF-A的索引) DataFrame -A

#PARTNER_NAME   TOTAL_NO_OF_RECORDS TOTAL_QUANTITY
a   22142   309941.01
b   1719    34301.67
d   4376    345460.7
e   73723   2166729.41
c   2045    165651
f   307 1827993.54
b   1719    34301.67
c   2039    165674

DataFrame-B

Records Quantity
2045    165651
22142   309941.01
17  312
2   300
640 9375.75
68  256
1719    34301.67
2899    219700.8707
451 6658.06
70  3179.24
776 6849.52

我要从DataFrame-B中提取数据,并想在DataFrame-A列TOTAL_NO_OF_RECORDS和TOTAL_QUANTITY之间执行验证,并在每行上使用DatFrame-B(记录数量)。如果我找到比赛,我想获得将要获得比赛的INDEX / ROW号。 我正在使用以下代码

for transaction_count,quantity_coun in zip(df_b.iloc[:,0], df_b.iloc[:,1]):
    indices = df_a.index[df_a['TOTAL_NO_OF_RECORDS'].all() == transaction_count and df_a['TOTAL_QUANTITY'] == quantity_count]

,但未获得正确的索引位置。 我想要从DataFrame-A索引位置开始的期望输出

print(indices)
O/P: 0
O/P: 1
O/P: 4
O/P: 7

如果有人可以帮助,那将真的很有帮助。

1 个答案:

答案 0 :(得分:1)

您似乎想要做的是在A和B之间找到两列匹配的行-为此,您可以使用.merge。您需要从DataFrame A中删除索引,使其成为一列,并且可以通过列选择进行访问,例如:

indices = df1.reset_index().merge(
    df2, 
    right_on=['Records', 'Quantity'], 
    left_on=['TOTAL_NO_OF_RECORDS', 'TOTAL_QUANTITY']
)['index'].values

这给您:

array([0, 1, 6, 4])