如何用Pandas按测量温度与差值区间分组统计数据次数?
Pandas 区间组合频次统计实现方案
问题描述
现有如下Pandas DataFrame:
import pandas as pd df = pd.DataFrame({ 'date&time': ['2022-01-28', '2022-01-29', '2022-01-30', '2022-01-31'], 'measur_temp': [27, 27, 30, 33], 'cal_temp': [20, 23, 33, 32], 'diff': [7, 4, 3, 1] })
需要将measur_temp划分为10-20、21-30、31-40、41-50区间,同时将diff划分为diff<5、5<=diff<10、10<=diff<15、15<=diff<=20区间,统计数据落入对应区间组合的次数,最终输出符合指定格式的表格。
实现步骤
1. 定义区间边界与标签
明确两个字段的区间规则:
measur_temp:边界[10,21,31,41,51],对应标签['10-20','21-30','31-40','41-50']diff:边界[-float('inf'),5,10,15,20],对应标签['diff<5','5<=diff<10','10<=diff<15','15<=diff<=20']
2. 对原数据分箱处理
使用pd.cut()将字段映射到对应区间标签:
# 处理measur_temp区间 temp_bins = [10,21,31,41,51] temp_labels = ['10-20','21-30','31-40','41-50'] df['measur_Temp_range'] = pd.cut(df['measur_temp'], bins=temp_bins, labels=temp_labels, include_lowest=True) # 处理diff区间 diff_bins = [-float('inf'),5,10,15,20] diff_labels = ['diff<5','5<=diff<10','10<=diff<15','15<=diff<=20'] df['diff_range'] = pd.cut(df['diff'], bins=diff_bins, labels=diff_labels, include_lowest=True)
3. 交叉表统计频次
用pd.crosstab()生成区间组合的频次统计,同时确保所有指定温度区间都显示:
# 生成交叉表 cross_table = pd.crosstab(df['measur_Temp_range'], df['diff_range']) # 重置索引并补全缺失的温度区间 cross_table = cross_table.reindex(temp_labels).reset_index() # 填充无数据的区间为0.0 cross_table = cross_table.fillna(0.0)
4. 查看最终结果
执行代码后,cross_table即为所需表格:
print(cross_table)
输出结果:
measur_Temp_range diff<5 5<=diff<10 10<=diff<15 15<=diff<=20 0 10-20 0.0 0.0 0.0 0.0 1 21-30 1.0 1.0 0.0 0.0 2 31-40 2.0 0.0 0.0 0.0 3 41-50 0.0 0.0 0.0 0.0
内容的提问来源于stack exchange,提问作者Karma_X
相关产品推荐
相关产品推荐

