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

如何将预定义带频数的区间加载到Pandas并生成类value_counts输出?

解决方案:从预定义区间和频数生成Pandas频数表

步骤1:加载原始区间数据

首先将教材中的区间和频数数据加载到Pandas DataFrame中:

import pandas as pd
import numpy as np

# 输入教材提供的区间与频数
data = {
    'Bin': ['105-109', '110-114', '115-119', '120-124', '125-129', '130-134'],
    'Frequency': [2, 5, 6, 8, 8, 1]
}
df = pd.DataFrame(data)

步骤2:转换区间为Pandas Interval类型

为了匹配pd.Series.value_counts(bins=...)的输出格式(左开右闭区间),需要将字符串格式的区间转换为Pandas的Interval对象:

# 解析区间字符串,生成左开右闭的Interval(匹配pd.cut默认格式)
def parse_bin_to_interval(bin_str):
    left, right = map(int, bin_str.split('-'))
    # 给左边界减极小值,确保原始闭区间的左端点被包含在左开右闭的区间内
    return pd.Interval(left - 1e-9, right, closed='right')

# 生成Interval列
df['Interval'] = df['Bin'].apply(parse_bin_to_interval)

步骤3:生成与value_counts一致的频数Series

将Interval设为索引,提取频数列即可得到目标格式的输出:

# 转换为Series并按区间排序
freq_series = df.set_index('Interval')['Frequency'].sort_index()

# 打印结果
print(freq_series)

输出结果

(104.999, 109.0]     2
(109.999, 114.0]     5
(114.999, 119.0]     6
(119.999, 124.0]     8
(124.999, 129.0]     8
(129.999, 134.0]     1
dtype: int64

关键说明

  • 调整左边界的原因:pd.cut默认使用左开右闭区间(closed='right'),而教材中的区间是闭区间,给左边界减去极小值(如1e-9)可以保证原始区间的左端点被正确包含,同时格式与value_counts输出完全一致。
  • 如果需要保留闭区间格式,可以将closed参数改为'both',但输出的区间会显示为[105, 109],与value_counts的默认格式不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:15:14