Как найти количество вхождений строк одного датафрейма в другой в 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