Я хочу, чтобы те клиенты присутствовали во фрейме данных, который имеет больше ложного значения, чем истинного значения. Любое предложение о том, как этого добиться - PullRequest
1 голос
/ 27 марта 2020

Фрейм данных:

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']

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Сначала получить счетчики по 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']]
0 голосов
/ 27 марта 2020
df[df['B']=='false'].groupby(['A']).count().sort_values(by['A'],ascending=False).index[0]

Объяснение: Возьмите все значения только с 'False', groupby 'A' и считайте. Теперь отсортируйте значение в порядке убывания и получите первое значение индекса ('A').

...