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

如何高效筛选Pandas DataFrame,按主客场班级提取对应分数?

高效实现班级得分提取的Pandas方案

针对你需要从包含主客场信息的DataFrame中提取每个班级对应得分的需求,绝对不要用循环遍历——Pandas的矢量化操作能在大数据集下提供数倍甚至数十倍的效率提升,具体实现如下:

步骤1:构造初始数据(示例)

import pandas as pd

df = pd.DataFrame({
    'Class Home': ['A', 'B', 'C', 'A'],
    'Class Away': ['B', 'A', 'A', 'C'],
    'Point Home': [2, 4, 6, 8],
    'Point Away': [1, 3, 5, 7]
})

步骤2:矢量化拆分+合并(最优效率方案)

核心思路是把主客场数据拆成两个独立的子DataFrame,分别重命名列后合并:

# 提取主场班级和对应得分,重命名目标列
home_part = df[['Class Home', 'Point Home']].rename(columns={
    'Class Home': 'Class',
    'Point Home': 'Point'
})

# 提取客场班级和对应得分,重命名目标列
away_part = df[['Class Away', 'Point Away']].rename(columns={
    'Class Away': 'Class',
    'Point Away': 'Point'
})

# 合并两个子DataFrame,重置索引
final_df = pd.concat([home_part, away_part], ignore_index=True)

# 可选:按班级排序,和你给出的示例结果完全一致
final_df = final_df.sort_values('Class', ignore_index=True)

执行后得到的final_df就是你需要的结果:

ClassPoint
0A2
1A3
2A5
3A8
4B1
5B4
6C6
7C7

为什么这个方法高效?

  • 循环(itertuples/iterrows)是逐行进行Python层面的逻辑判断,大数据集下会触发大量的Python-C上下文切换,速度极慢;
  • 上述方案用Pandas内置的矢量化操作,底层基于C语言实现,直接对整列数据进行处理,完全避免了Python循环的开销,数据量越大,效率优势越明显。

替代简洁方案:用melt函数一步到位

如果你喜欢更简洁的写法,可以用melt函数实现同样的效果:

final_df = df.melt(
    value_vars=[['Class Home', 'Point Home'], ['Class Away', 'Point Away']],
    value_name=['Class', 'Point']
).drop(columns=['variable']).sort_values('Class', ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:15:34