Вы можете использовать pd.crosstab
, а затем логическую маску:
df = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2, 2, 2],
'Decision': ['Accepted', 'Rejected', 'Rejected', 'Rejected',
'Accepted', 'Accepted', 'Rejected', 'Accepted']})
df_ct = pd.crosstab(df['ID'], df['Decision'])
condition = df_ct['Accepted'] > df_ct['Rejected']
res = df_ct[condition].index
# Int64Index([2], dtype='int64', name='ID')
или выполнить вычисление по вашему выбору по кросс-табличным результатам:
print(df_ct)
Decision Accepted Rejected
ID
1 1 3
2 3 1