Вместо того, чтобы компилировать в списки, вы можете рассмотреть наборы. В общем смысле это может быть более полезным, поскольку я предполагаю, что порядок и избыточность не имеют значения. Кроме того, легче определить, какие провайдеры входят в один набор, а не в другой. Вы можете переставить свой фрейм данных с помощью pivot_table
, чтобы сделать это:
df_new = df.pivot_table(index='ID', columns='Search', aggfunc=set).droplevel(0, axis=1)
Результат:
Search No Yes
ID
1 {C, B} {A, B}
2 {C, B} {D, A, B}
С этим новым фреймом данных вы можете сравнивать значения с тем же «ID», что и просто:
# df_new['No'] == df_new['Yes'] # If providers are the same between "yes" and "no"
df_new['Yes'] - df_new['No'] # Providers that are in "yes" but not "no"
Результат (для заданной разности):
ID
1 {A}
2 {D, A}
dtype: object