我有一个像这样的数据框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,但这仅限于一个非常特殊的查询。我想学习的是知道如何将图层“分组”为块,然后对这些特定的块进行分析。
谢谢!
答案 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)