如何对熊猫中数据框的值进行分类?

时间:2020-03-10 10:54:25

标签: python pandas aggregation

我正在尝试编写代码,以使用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        |
+-------------+-------------+-------------+-------------+
|             |             |             |             | 

有人可以帮我吗?提前感谢!

2 个答案:

答案 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')