循环将Groupby对象转换为DataFrame对象

时间:2018-06-28 07:48:18

标签: python pandas dataframe

我有一个像这样的数据框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!

昨天我问过类似的question,但这仅限于一个非常特殊的查询。我想学习的是知道如何将图层“分组”为块,然后对这些特定的块进行分析。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为更好的方法是使用:

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

但是如果需要使用循环是必要的,可以通过添加另一个变量i来解压group和df的元组名称:

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)