【问题标题】:How to categorize values of data frame in pandas?如何对熊猫中数据框的值进行分类?
【发布时间】:2020-06-22 06:20:34
【问题描述】:

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

有人可以帮我做这件事吗?提前谢谢!

【问题讨论】:

  • 嗨 UpaniK,您能展示一下您的分组前数据样本吗?
  • 年龄列填充了 18-60 之间的浮点值

标签: python pandas aggregation


【解决方案1】:

使用 Series.unstack 和简化 groupby 解决方案 - 删除 agg 并添加 GroupBy.size

GroupBy.count 用于排除缺失值的计数,这里两个解决方案的工作方式相同,因为age_range 用于groupby 中的by 参数:

df = data_frame.groupby(['Region','age_range']).size().unstack(fill_value=0)

或者使用crosstab:

df = pd.crosstab(data_frame['Region'], data_frame['age_range'])

【讨论】:

  • 非常感谢您的回复!!!但它正在出错。 KeyError: 'count'
  • ValueError: 'age_range' is both an index level and a column label, which is ambiguous. 现在它给出了这个错误
  • 很抱歉,我有点落后于所需的知识集。所以我在这个错误中迷失了
【解决方案2】:

试试DataFrame.pivot方法:

data_frame.pivot(index='Region', columns='age_range', values='count')

【讨论】:

  • 非常感谢您的回复。 ValueError: 'age_range' is both an index level and a column label, which is ambiguous.这个方法执行时出现了这个错误!
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2022-01-25
  • 2017-10-15
  • 1970-01-01
相关资源
最近更新 更多