Фрейм данных:
df = pd.DataFrame({'A': ['cust1', 'cust1', 'cust2', 'cust1', 'cust2', 'cust1', 'cust2', 'cust2','cust2','cust1'], 'B': ['true', 'true', 'true', 'false', 'false', 'false', 'false', 'true','false','true']})
Выход: ['cust2']
Сначала получить счетчики по crosstab, а затем отфильтровать index значения по столбцам с boolean indexing, для большего используется Series.gt:
crosstab
index
boolean indexing
Series.gt
df1 = pd.crosstab(df['A'], df['B']) print (df1) B false true A cust1 2 3 cust2 3 2 c = df1.index[df1['false'].gt(df1['true'])].tolist() #if True, False are boolean #c = df1.index[df1[False].gt(df1[True])].tolist() print (c) ['cust2']]
df[df['B']=='false'].groupby(['A']).count().sort_values(by['A'],ascending=False).index[0]
Объяснение: Возьмите все значения только с 'False', groupby 'A' и считайте. Теперь отсортируйте значение в порядке убывания и получите первое значение индекса ('A').