Я должен найти соответствующие значения в двух Pandas DataFrame.
Ввод: df1:
server system directions msgTYPE msgID count
0 1 sys1_in in ADT MSG0001 1
1 1 sys1_in in ADT MSG0002 1
2 1 sys1_in in ADT MSG0003 1
3 1 sys1_in in ADT MSG0004 1
df2:
server system directions msgTYPE msgID count
0 1 sys2_out out ADT MSG0001 1
1 1 sys2_out out ADT MSG0001 1
2 1 sys3_out out ADT MSG0003 1
3 1 sys4_out out ADT MSG0004 1
Вывод должен быть:
system_in system_out count
0 sys1_in sys2_out 2
1 sys1_in sys3_out 1
2 sys1_in sys4_out 1
Поэтому я должен построить издва DF один df со столбцами с входной и выходной системами, есть с MesgID коррелированы.
Я делаю это с помощью df.itertuples и df.goupby следующим образом:
model = pd.DataFrame(columns=['in', 'out', 'count'])
for item in ins.itertuples(index=True, name='Pandas'):
selected = outs.query('msgID == "%s"' % (getattr(item, "msgID")))
for row in selected.itertuples(index=True, name='Pandas2'):
model = model.append({'in': getattr(item, "system"), 'out': getattr(row, "system"), 'count': 1},
ignore_index=True)
result = model.groupby(['in', 'out'])['count'].sum().reset_index()
Работает, но очень неэффективно, входные кадры (df1, df2) имеютоколо 2 миллионов строк. Кто-нибудь знает более эффективный способ, который встроен в структуру Pandas?
Приветствия.