You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按年龄计算对应婚姻状况的中位数

解决按年龄求婚姻状况中位数的问题

嘿,我来帮你搞定这个报错和需求!你遇到的DataError: No numeric types to aggregate,本质原因很简单:你用了mean()来计算婚姻状况的统计值,但Estado_Civil是字符串类型的分类数据,根本没有数值可以用来计算均值,自然会报错啦。

要实现每个年龄对应的婚姻状况中位数,我们需要先给婚姻状况赋予有序的逻辑顺序,让pandas能识别它们的优先级,进而计算中位数。具体步骤如下:

步骤1:定义婚姻状况的有序分类

首先得给不同的婚姻状况设定一个合理的顺序(比如「单身(Soltero)」<「已婚(Casado)」<「离婚(Divorciado)」,你可以根据实际需求调整顺序),把字符串列转成有序分类类型。

步骤2:按年龄分组计算中位数

用分组后的median()方法就能正确计算分类数据的中位数,最后再整理成你想要的列名格式。

完整代码示例

import pandas as pd

# 假设你的DataFrame是df_edad_estado_civil,先定义婚姻状况的顺序
estado_civil_order = ['Soltero', 'Casado', 'Divorciado']  # 可根据实际类别补充调整

# 将婚姻状况列转为有序分类类型
df_edad_estado_civil['Estado_Civil'] = pd.Categorical(
    df_edad_estado_civil['Estado_Civil'],
    categories=estado_civil_order,
    ordered=True
)

# 按年龄分组,计算婚姻状况的中位数,并重命名列
result_df = df_edad_estado_civil.groupby('Edad')['Estado_Civil'].median().reset_index()
result_df.columns = ['years_old', 'status_median']

# 可选:把分类类型转回字符串(不转也能显示标签,转了更直观)
result_df['status_median'] = result_df['status_median'].astype(str)

# 查看结果
print(result_df)

代码说明

  • 有序分类会给每个婚姻状况分配一个内在的数值(比如Soltero=0,Casado=1),median()会基于这个数值计算中间值,再映射回对应的标签。
  • 如果你的数据里还有其他婚姻状况,只要在estado_civil_order里补充进去,调整好顺序就行。

内容的提问来源于stack exchange,提问作者ADRIAN LEON

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:08:27