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

如何在Pandas中统计各年龄区间可覆盖的区间数量?

解决方法

要实现统计每个年龄区间能完全包含的其他区间数量,可按以下步骤操作:

步骤1:拆分年龄区间为数值列

先把字符串格式的年龄区间拆分成起始值和结束值并转为整数,方便后续做区间包含关系的比较。

步骤2:计算每个区间的包含数量

利用矩阵广播的方式高效比较每个区间与所有区间的包含关系:当当前区间的起始值 ≤ 目标区间的起始值,且当前区间的结束值 ≥ 目标区间的结束值时,说明当前区间完全包含目标区间,统计这类目标区间的总数。

完整代码实现

import pandas as pd

# 构建示例DataFrame
df = pd.DataFrame({
    'Name': ['A', 'B', 'C', 'D', 'E'],
    'Age range': ['5-12', '12-18', '11-14', '7-9', '17-22']
})

# 拆分年龄区间为起始和结束数值列
df[['start', 'end']] = df['Age range'].str.split('-', expand=True).astype(int)

# 利用矩阵广播计算每个区间包含的区间数量
starts = df['start'].values[:, None]
ends = df['end'].values[:, None]
df['Count'] = ((starts <= df['start'].values) & (ends >= df['end'].values)).sum(axis=1)

# 整理为期望的输出格式
result = df[['Age range', 'Count']]
print(result)

代码说明

  • str.split('-', expand=True):将Age range列按-拆分,生成起始值和结束值两列。
  • 矩阵广播:starts <= df['start'].values生成5×5的布尔矩阵,每个元素表示当前区间起始值是否小于等于对应目标区间的起始值;ends >= df['end'].values同理生成结束值的比较矩阵。
  • 两个布尔矩阵取逻辑与后,每行求和得到当前区间能完全包含的区间总数(包含自身)。

运行结果

Age rangeCount
5-122
12-181
11-141
7-91
17-221

注:若期望结果中12-18的Count为2,可能是对“完全包含”的定义存在差异(比如允许端点重叠或部分覆盖),可根据实际需求调整比较条件,例如修改<=为<、>=为>,或调整重叠判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:55:33