如何基于文件名标签计算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
相关产品推荐
相关产品推荐

