如何用Pandas或Excel按标识重新排列Excel单元格内容
实现Excel表格按前缀重排列内容的方法
原数据表格
| A | B | C |
|---|---|---|
| KLM: 123 | QRS: 345 | NOP: 356 |
| NOP: 454 | KLM: 123 | QRS: 564 |
| NOP: 65 | KLM: 423 | QRS: 642 |
| QRS: 54 | KLM: 523 | NOP: 325 |
| QRS: 234 | KLM: 123 | NOP: 56 |
| KLM: 234 | NOP: 5425 | QRS: 3425 |
目标效果
将每行中以KLM开头的内容归到A列,QRS开头归到B列,NOP开头归到C列,最终得到:
| A | B | C |
|---|---|---|
| KLM: 123 | QRS: 345 | NOP: 356 |
| KLM: 123 | QRS: 564 | NOP: 454 |
| KLM: 423 | QRS: 642 | NOP: 65 |
| KLM: 523 | QRS: 54 | NOP: 325 |
| KLM: 123 | QRS: 234 | NOP: 56 |
| KLM: 234 | QRS: 3425 | NOP: 5425 |
方法一:使用Pandas实现
步骤1:读取数据
import pandas as pd # 读取目标Excel文件,替换为你的文件路径和工作表名 df = pd.read_excel("data.xlsx", sheet_name="Sheet1")
步骤2:定义重排逻辑并应用
def rearrange_row(row): # 从当前行提取对应前缀的内容 klm_val = next(val for val in row if val.startswith("KLM")) qrs_val = next(val for val in row if val.startswith("QRS")) nop_val = next(val for val in row if val.startswith("NOP")) return pd.Series([klm_val, qrs_val, nop_val], index=["A", "B", "C"]) # 对每行应用重排函数 new_df = df.apply(rearrange_row, axis=1)
步骤3:保存结果
# 将重排后的数据保存到新Excel文件 new_df.to_excel("rearranged_data.xlsx", index=False)
注:如果存在某行缺失某类前缀内容的情况,可以修改
next()方法添加默认值,比如next((val for val in row if val.startswith("KLM")), "")返回空字符串。
方法二:使用Excel公式实现
步骤1:输入公式
在原数据旁新建空白表格(建议先备份原数据),在新表格的对应单元格输入以下公式:
- A2单元格(提取KLM内容):
=INDEX($A2:$C2,MATCH("KLM*",$A2:$C2,0)) - B2单元格(提取QRS内容):
=INDEX($A2:$C2,MATCH("QRS*",$A2:$C2,0)) - C2单元格(提取NOP内容):
=INDEX($A2:$C2,MATCH("NOP*",$A2:$C2,0))
步骤2:批量填充
选中A2:C2单元格,下拉填充到所有行,即可自动完成所有行的重排。
注:如果你的Excel支持动态数组函数,也可以用
FILTER函数简化,比如A2单元格输入=FILTER($A2:$C2,LEFT($A2:$C2,3)="KLM"),同理修改前缀应用到B、C列。
内容的提问来源于stack exchange,提问作者Subhaan Khan
相关产品推荐
相关产品推荐

