количество панд в процентах от категориальной переменной - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть pandas df вроде

df_test = pd.DataFrame({'A': 'a a a b b'.split(), 'B': ['Y','N','Y','Y','N']})

, и мой желаемый результат будет df_test2 = pd.DataFrame({'A': 'a b'.split(), 'B': [2/3,1/2]}) Как бы вы сделали groupby (). Подать заявку по столбцу A, чтобы получить процент'Y' в столбце B?

Я искал groupby.apply (), но пока ничего не помогло Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Используйте GroupBy.mean с логической маской, где True s - процессы, подобные 1, новый столбец не требуется, поскольку также передается Series df_test["A"] в groupby:

Примечание:

Вместо == используется eq для более чистого синтаксиса.

df = df_test["B"].eq('Y').groupby(df_test["A"]).mean().reset_index()
print (df)
   A         B
0  a  0.666667
1  b  0.500000
0 голосов
/ 09 декабря 2018

Один из подходов может быть

In [10]: df_test.groupby('A').B.apply(lambda x: (x == 'Y').mean())
Out[10]:
A
a    0.666667
b    0.500000

или, если вы не против изменения df_test в процессе,

In [15]: df_test['C'] = df_test.B == 'Y'
In [17]: df_test.groupby('A').C.mean()
Out[17]:
A
a    0.666667
b    0.500000
Name: C, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...