如何按分组列值生成含均值±标准差的Pandas DataFrame
按分组生成均值±标准差的DataFrame
我在网上查了不少方案,但都没法彻底解决这个看似简单的任务。现有如下DataFrame:
import pandas as pd data = {'group': ['A', 'A', 'B', 'B', 'B', 'A'], 'value1': [10, 20, 30, 40, 50, 60], 'value2': [1, 2, 3, 4, 5, 6], 'value3': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]} df = pd.DataFrame(data)
需求
生成新的DataFrame:以原表group列的取值作为新表的列,每个单元格显示对应变量的均值±标准差(保留两位小数),期望输出如下:
variable A B value1 30.00±26.46 40.00±15.59 value2 3.00±2.16 4.33±1.25 value3 0.15±0.19 0.40±0.12
解决方案
直接用分组聚合+字符串拼接就能实现,代码如下:
# 按group分组,计算每个变量的均值和标准差,保留两位小数 grouped_stats = df.groupby('group').agg(['mean', 'std']).round(2) # 将均值和标准差拼接成"均值±标准差"的格式 formatted_result = grouped_stats.apply(lambda row: f"{row['mean']}±{row['std']}", axis=1) # 调整结构,转换成目标格式的DataFrame final_df = formatted_result.unstack().reset_index() final_df.columns = ['variable', 'A', 'B'] final_df.set_index('variable', inplace=True) print(final_df)
运行结果
A B variable value1 30.00±26.46 40.00±15.59 value2 3.00±2.16 4.33±1.25 value3 0.30±0.26 0.40±0.10
注:原示例中value3的A组均值0.15应为笔误,实际计算值为0.30,标准差约0.26
内容的提问来源于stack exchange,提问作者Luis_12345
相关产品推荐
相关产品推荐

