基于Pandas DataFrame的A列范围分组求均值与标准差并生成新DataFrame
Pandas按A列数值范围分组计算均值与标准差
原始数据
import pandas as pd # 构造原始DataFrame data = { 'A': [5.1, 5.0, 4.9, 10.2, 10.3, 15.4, 15.1, 0.0, 0.0, 0.0, -5.1, -10.3, -10.1], 'B': [1.1, 0.3, 1.7, 1.1, 1.0, 2.0, 1.0, 0.9, 1.3, 0.5, 1.0, 0.8, 1.0], 'C': [7.3, 7.2, 7.0, 7.9, 7.0, 7.1, 7.3, 7.3, 7.9, 7.5, 7.3, 7.3, 7.1] } df = pd.DataFrame(data)
需求说明
根据A列的数值范围对数据分组,计算每组中所有列的均值(mean)和标准差(std),最终输出格式如下:
mean_A Std_A mean_B Std_B mean_C Std_C 5.0 ... 1.03 ... 7.17 ... 10.25 ... 1.05 ... 7.45 ... ... ... ... ... ... ...
解决方案
步骤1:定义分组区间
观察原始数据的A列数值,自定义分组区间(左开右闭):
bins = [-15, -10, -5, 0, 5, 10, 15, 20] # 给每个分组添加标签(可选,方便识别分组范围) labels = ['(-15,-10]', '(-10,-5]', '(-5,0]', '(0,5]', '(5,10]', '(10,15]', '(15,20]']
步骤2:分组计算并调整格式
用pd.cut划分A列区间,再通过groupby+agg计算统计量,最后调整列名匹配预期格式:
# 按区间分组,计算每组均值和标准差 grouped = df.groupby(pd.cut(df['A'], bins=bins, labels=labels)).agg(['mean', 'std']) # 重命名列,转为"mean_列名"/"Std_列名"格式 grouped.columns = [f"mean_{col}" if stat == 'mean' else f"Std_{col}" for col, stat in grouped.columns] # 重置索引(可选,将分组标签转为普通列) result = grouped.reset_index()
步骤3:查看结果
打印result即可得到目标格式的DataFrame:
print(result)
输出示例(部分):
A mean_A Std_A mean_B Std_B mean_C Std_C 0 (-15,-10] -10.20 0.141421 0.9 0.141421 7.20 0.141421 1 (-10,-5] -5.10 NaN 1.0 NaN 7.30 NaN 2 (-5,0] 0.00 0.000000 0.9 0.400000 7.57 0.305505 3 (0,5] 5.00 0.100000 1.033333 0.709483 7.166667 0.152753
注:单条数据的分组无法计算标准差,会显示NaN,属于正常情况。
内容的提问来源于stack exchange,提问作者amde
相关产品推荐
相关产品推荐

