我正在尝试编写代码,以使用python pandas库基于值范围对数据集(来自CSV)进行分类。可以使用集合函数。但是我正在努力使用聚合函数。
+-------------+-------------+-------------+-------------+-------------+
|Name | Age |Region |Telephone |Address |
+-------------+-------------+-------------+-------------+-------------+
| | | | | |
我可以开发以下代码。
import pandas as pd
data_frame = pd.read_csv('5000 Records.csv')
data_frame['age_range'] = pd.cut(data_frame['Age in Yrs.'],
bins=[-float('inf'),30,50,float('inf')],
labels=['above', 'in between', 'below'])
data_frame = data_frame.groupby(['Region','age_range']).agg(
{
'age_range': "count"
}
)
print(data_frame)
但结果如下
age_range
Region age_range
Midwest above 312
in between 695
below 390
Northeast above 201
in between 421
below 219
South above 435
in between 983
below 452
West above 211
in between 443
below 238
但要求是将输出获取为:
+-------------+-------------+-------------+-------------+
|Region | above |in between |below |
+-------------+-------------+-------------+-------------+
| | | | |
有人可以帮我吗?提前感谢!
答案 0 :(得分:2)
使用Series.unstack
和简化的groupby
解决方案-删除了agg
并添加了GroupBy.size
。
GroupBy.count
用于排除缺失值的计数,此处两个解决方案的工作原理相同,因为age_range
用于by
中的groupby
参数:
df = data_frame.groupby(['Region','age_range']).size().unstack(fill_value=0)
或使用crosstab
:
df = pd.crosstab(data_frame['Region'], data_frame['age_range'])
答案 1 :(得分:0)
尝试DataFrame.pivot
方法:
data_frame.pivot(index='Region', columns='age_range', values='count')