Преобразование объекта Groupby в объекты DataFrame в цикле - PullRequest
0 голосов
/ 28 июня 2018

У меня есть датафрейм df, который выглядит следующим образом

No Country Sex Age Group
1    Spain   M Young
2    Norway  F Middle
3    Mexico  M Elderly
...

Моя цель - сначала сгруппировать эти данные по стране, а затем провести анализ по полу и возрастным группам, используя .value_counts()

Таким образом, я использовал groupby для этого через df2 = df.groupby(df.Country) и зациклил, как это

for d in df2:
    print(type(d))

Я получаю этот вывод:

<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
...

Я хотел использовать

for d in df2:
    print(pd.DataFrame(d).Sex.value_counts())

но я получаю эту ошибку

DataFrame constructor not properly called!

Вчера я задавал похожий вопрос , но это было ограничено очень конкретным запросом. Я хочу узнать, как «сгруппировать» слои в куски, а затем выполнить анализ этих отдельных кусков.

Спасибо!

1 Ответ

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

Я думаю, лучше использовать:

s = df.groupby('Country').Sex.value_counts()
print (s)
Country  Sex
Mexico   M      1
Norway   F      1
Spain    M      1
Name: Sex, dtype: int64

Но если необходимо использовать циклы, необходимо распаковать кортежи name группы и df, добавив еще одну переменную i:

df2 = df.groupby(df.Country)
for i, d in df2:
    print(type(d))
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>

Или используйте GroupBy.apply:

def func(x):
    print (x)
    a = x.Sex.value_counts()
    #another code 
    return a

df2 = df.groupby(df.Country).apply(func)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...