You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于文件名标签计算Pandas DataFrame中测量值的比率?

高效计算Pandas中分组标签的测量值比率

嘿,我懂你现在的需求,手动遍历字符串提取基础文件名和标签确实有点繁琐,Pandas提供了非常简洁的矢量化操作来处理这类场景,完全不用写循环!下面是更高效的实现方案:

步骤1:拆分文件名到新列

首先,我们可以直接用str.split把Filename列按下划线拆分成基础文件名和标签两列,这一步是矢量化操作,比手动循环快得多:

import pandas as pd

df = pd.DataFrame({
    "Filename":["fileName1_uniqueTag1", "fileName2_uniqueTag1", "fileName3_uniqueTag1", 
                "fileName1_uniqueTag2", "fileName2_uniqueTag2", "fileName3_uniqueTag2"], 
    "measurement":[1336.564888, 1090.852579, 990.320323, 1202.522612, 1098.045258, 923.600277],
})

# 拆分Filename为基础名和标签列
df[['BaseName', 'Tag']] = df['Filename'].str.split('_', expand=True)

步骤2:重塑数据并计算比率

接下来,我们用pivot把数据转成宽格式,让每个基础文件名对应两个标签的测量值,然后直接计算比值:

# 重塑数据:基础名为索引,标签为列,值为measurement
pivoted = df.pivot(index='BaseName', columns='Tag', values='measurement')

# 计算uniqueTag2/uniqueTag1的比率,并整理成目标格式
result = (pivoted['uniqueTag2'] / pivoted['uniqueTag1']) \
         .reset_index() \
         .rename(columns={'BaseName': 'Filename', 0: 'uniqueTag2/uniqueTag1'})

print(result)

运行这段代码后,你会得到完全符合预期的结果:

Filename  uniqueTag2/uniqueTag1
0  fileName1              0.899711
1  fileName2              1.006593
2  fileName3              0.932627

为什么这个方法更好?

  • 矢量化操作:Pandas的str.split和pivot都是底层优化过的操作,处理大型数据集时比手动循环快几个数量级
  • 代码简洁:几行代码就完成了拆分、重塑、计算的全流程,可读性更高
  • 扩展性强:如果以后标签数量增加,只需要调整比率计算的列名即可,不用修改循环逻辑

内容的提问来源于stack exchange,提问作者Zac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:38:16