Как сгруппировать строки, чтобы использовать value_counts в созданных группах с пандами? - PullRequest
0 голосов
/ 27 июня 2018

У меня есть некоторые данные клиента, такие как эта, во фрейме данных:

S No Country Sex
1    Spain   M
2    Norway  F
3    Mexico  M
...

Я хочу получить такой вывод:

Spain
M = 1207
F = 230

Norway 
M = 33
F = 102

...

У меня есть базовое представление о том, что я хочу сгруппировать свои строки на основе их стран с чем-то вроде df.groupby(df.Country), а для выбранных строк мне нужно выполнить что-то вроде df.Sex.value_counts()

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вы также можете использовать pandas.pivot_table:

res = df.pivot_table(index='Country', columns='Sex', aggfunc='count', fill_value=0)

print(res)

        SNo   
Sex       F  M
Country       
Mexico    0  1
Norway    1  0
Spain     0  1
0 голосов
/ 27 июня 2018

Я думаю, что нужно crosstab:

df = pd.crosstab(df.Sex, df.Country)

Или, если хотите использовать ваше решение, добавьте unstack для столбцов с первым уровнем MultiIndex:

df = df.groupby(df.Country).Sex.value_counts().unstack(level=0, fill_value=0)
print (df)
Country  Mexico  Norway  Spain
Sex                           
F             0       1      0
M             1       0      1

EDIT:

Если вы хотите добавить больше столбцов, то можно указать, какой параметр уровня преобразуется в столбцы:

df1 = df.groupby([df.No, df.Country]).Sex.value_counts().unstack(level=0, fill_value=0).reset_index()
print (df1)
No Country Sex  1  2  3
0   Mexico   M  0  0  1
1   Norway   F  0  1  0
2    Spain   M  1  0  0

df2 = df.groupby([df.No, df.Country]).Sex.value_counts().unstack(level=1, fill_value=0).reset_index()
print (df2)
Country  No Sex  Mexico  Norway  Spain
0         1   M       0       0      1
1         2   F       0       1      0
2         3   M       1       0      0

df2 = df.groupby([df.No, df.Country]).Sex.value_counts().unstack(level=2, fill_value=0).reset_index()
print (df2)
Sex  No Country  F  M
0     1   Spain  0  1
1     2  Norway  1  0
2     3  Mexico  0  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...