python - 在循环中将 Groupby 对象转换为 DataFrame 对象
问题描述
我有一个df
看起来像这样的数据框
No Country Sex Age Group
1 Spain M Young
2 Norway F Middle
3 Mexico M Elderly
...
我的目标是首先根据国家/地区对这些数据进行分组,然后根据性别和年龄组进行分析,使用.value_counts()
因此,我groupby
在这个via上使用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!
我昨天问了一个类似的问题,但这仅限于一个非常特殊的查询。我想学习的是知道如何将图层“分组”成块,然后对这些特定的块进行分析。
谢谢!
解决方案
我认为更好的是使用:
s = df.groupby('Country').Sex.value_counts()
print (s)
Country Sex
Mexico M 1
Norway F 1
Spain M 1
Name: Sex, dtype: int64
但是如果想要使用循环是必要的,通过添加另一个变量来解压组和 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)
推荐阅读
- python - curl 作为 Zapier Webhook 到 Stripe
- javascript - Javascript 上传 CSV,检测特定关键字,如果检测到则捕获用户 ID
- c++ - 如何从 Microsoft Visual Studio 2017 中的文本框中删除光束?
- google-apps-script - 继承的 Apps 脚本 onOpen 函数在克隆的 Google 表格上不起作用
- python - SQLite将数据从第一个表复制到第二个表
- ios - 为什么 NSAttributedString 格式化我的整个字符串?
- python-3.x - WxForms 日期时间到 Python 日期时间
- java - Ant 构建失败 - build.xml
- android - kotlin recyclerview 显示sqlite父子表数据
- mysql - Symfony2.8 从 phpmyadmin 数据库中读取数据