如何基于数据列生成Histogram并获取各Bin内元素索引及对应名称
实现直方图分组并获取对应元素的索引与名称
步骤说明
你已经通过np.histogram得到了分组计数和区间边界,接下来可以结合Pandas的分组功能,快速定位每个区间内的元素索引与对应的name值:
完整代码示例
import numpy as np import pandas as pd # 构造示例数据 data = { 'name': ['a', 'b', 'c', 'd'], 'n_7': [20, 14, 18, 11], 'n_6': [11, 50, 21, 4] } df2 = pd.DataFrame(data) # 生成直方图的计数与区间边界(你的现有代码) counts, binEdges = np.histogram(df2.n_7, bins=6) # 将n_7列的值映射到对应的区间分组 df2['bin_group'] = pd.cut(df2['n_7'], bins=binEdges, include_lowest=True) # 遍历每个分组,提取索引和name for bin_interval, group in df2.groupby('bin_group'): print(f"区间: {bin_interval}") print(f"元素索引: {group.index.tolist()}") print(f"对应的name: {group['name'].tolist()}") print("---")
代码解释
pd.cut(df2['n_7'], bins=binEdges, include_lowest=True):将n_7的每个值分配到对应的直方图区间,include_lowest=True确保最小值被包含在第一个区间内(匹配np.histogram的左闭右开规则,最后一个区间为闭区间)。groupby('bin_group'):按区间分组,每个组包含该区间内的所有行数据。- 遍历分组时,
group.index.tolist()获取组内元素的索引列表,group['name'].tolist()获取对应的名称列表。
示例输出
运行上述代码后,针对示例数据会输出类似结果:
区间: (10.991, 12.833] 元素索引: [3] 对应的name: ['d'] --- 区间: (12.833, 14.667] 元素索引: [1] 对应的name: ['b'] --- 区间: (16.5, 18.333] 元素索引: [2] 对应的name: ['c'] --- 区间: (18.333, 20.167] 元素索引: [0] 对应的name: ['a'] --- 区间: (14.667, 16.5] 元素索引: [] 对应的name: [] --- 区间: (20.167, 22.0] 元素索引: [] 对应的name: [] ---
内容的提问来源于stack exchange,提问作者Hamid
相关产品推荐
相关产品推荐

