如何将DataFrame中城市的均值与标准差列用±符号合并
合并均值与标准差列的实现方法(Python/Excel)
需求说明
现有包含多城市均值(列名后缀_mean)和标准差(列名后缀_sdev)的表格数据,需要将每个城市的均值与标准差用±符号合并,生成以城市名为列名的新表格,空值保留原状态。
Python 实现方案(基于Pandas)
步骤与代码
- 导入Pandas并构造/读取原始数据:
import pandas as pd # 示例原始数据(实际可通过pd.read_csv/pd.read_excel读取) data = { 'Gulzarpet_mean': [20.2, 12.7], 'Amravati_mean': [25.5, 14.8], 'Vizag_mean': [pd.NA, 56.7], 'Gulzarpet_sdev': [5.9, 12.3], 'Amravati_sdev': [7.4, 15.9], 'Vizag_sdev': [pd.NA, 7.3] } df = pd.DataFrame(data)
- 批量合并对应列:
# 提取唯一城市名称 cities = list(set(col.split('_')[0] for col in df.columns)) # 初始化新DataFrame new_df = pd.DataFrame() # 循环处理每个城市的均值与标准差列 for city in cities: mean_col = f"{city}_mean" sdev_col = f"{city}_sdev" # 仅当均值和标准差都非空时合并,否则保留空值 new_df[city] = df.apply( lambda row: f"{row[mean_col]}±{row[sdev_col]}" if pd.notna(row[mean_col]) and pd.notna(row[sdev_col]) else pd.NA, axis=1 ) # 调整列顺序与原始数据的城市顺序一致(可选) new_df = new_df[[col.split('_')[0] for col in df.columns if '_mean' in col]] # 输出结果 print(new_df)
代码说明
- 通过拆分列名提取城市名,避免手动逐个指定城市
- 用
apply逐行判断空值,确保仅当均值和标准差都有效时才合并 - 可选调整列顺序,保持与原始数据的城市排列一致
Excel 实现方案
方法1:公式手动批量处理
- 在空白列(如G列)首行输入公式,以Gulzarpet为例(均值在A列,标准差在D列):
=IF(AND(NOT(ISBLANK(A2)),NOT(ISBLANK(D2))),A2&"±"&D2,"")
- 将公式下拉填充至所有行,复制结果并粘贴为值,将列名改为对应城市名
- 重复上述步骤处理其他城市
方法2:Power Query 高效批量处理
- 选中原始数据区域,点击「数据」→「从表格/区域」导入Power Query编辑器
- 点击「转换」→「逆透视列」→「逆透视所有列」,将数据转为「属性」「值」两列
- 选中「属性」列,点击「拆分列」→「按分隔符」,选择下划线
_,拆分为「城市名」「类型」两列 - 选中「城市名」列,点击「透视列」,值列选「值」,列名选「类型」,聚合函数选「不要聚合」
- 点击「添加列」→「自定义列」,输入公式:
= if [mean] <> null and [sdev] <> null then Text.From([mean]) & "±" & Text.From([sdev]) else null
- 删除「mean」「sdev」列,点击「关闭并上载」,将结果导出至Excel表格
内容的提问来源于stack exchange,提问作者Atique Barudgar
相关产品推荐
相关产品推荐

