Как найти количество вхождений строк одного датафрейма в другой в pandas?

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

    ID          ACCOUNTID   START_TIME      END_TIME        ZONENUMBER  
0   374967021   6170251.0   1609459336928   1609459456928   bb8a    
1   374967045   3122050.0   1609459470425   1609463070425   01c7
2   374967037   6709301.0   1609459434054   1609459854054   c4dc    
3   374967064   6170245.0   1609459603210   1609463203210   480f
4   374967078   6202087.0   1609459706179   1609463306179   9788    
... ... ... ... ... ... ... ... ...
7992481 393329703   1431232.0   1614420997037   1614432277037   480f    
7992482 393524887   1057328.0   1614438336060   1614438396060   718e    
7992483 393524448   1057328.0   1614438291790   1614438351790   718e        
7992484 392651729   5735061.0   1614309979345   1614315259345   db5e    

и другой

    ACCOUNTID   ZONENUMBER
0   65.0    ccac
1   221.0   8ee8
2   242.0   a444
3   250.0   a77f
4   265.0   a77f
... ... ...
198242  8172118.0   5edf
198243  8172215.0   9788
198244  8172220.0   718e
198245  8172254.0   a54b
198246  8172276.0   19b0

Нужно найти количество вхождений целой строки(тоесть значений двух колонок) второго датафрейма в первый


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

Автор решения: Алексей Р

.merge() объединяет фреймы по указанным столбцам построчно в зависимости от совпадения значений (ключей) в этих столбцах. Аргумент how (пропущен) имеет дефолтное значение inner - использовать пересечение ключей из обоих фреймов, аналогично внутреннему соединению SQL. Соответственно, в результирующий фрейм попадают только те строки, в которых ключи совпали. После объединения печатаем кол-во строк - из свойства shape c нулевым индексом.

df1 = pd.DataFrame({'ID': [374967021, 374967045, 374967037, 374967064, 374967078],
                    'ACCOUNTID': [6170251.0, 3122050.0, 6709301.0, 6170245.0, 6202087.0],
                    'START_TIME': [1609459336928, 1609459470425, 1609459434054, 1609459603210, 1609459706179],
                    'END_TIME': [1609459456928, 1609463070425, 1609459854054, 1609463203210, 1609463306179],
                    'ZONENUMBER': ['bb8a', 'ccac', 'c4dc', '480f', '9788']})

df2 = pd.DataFrame(
    {'ACCOUNTID': [65.0, 3122050.0, 242.0, 250.0, 265.0], 'ZONENUMBER': ['8ee8', 'ccac', 'a444', 'a77f', 'a77f']})

df3 = df1.merge(df2, on=['ACCOUNTID', 'ZONENUMBER'])
print(df3.shape[0])
1
→ Ссылка