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

如何按年份、球员姓名两个匹配字段合并两个Numpy数组

Python基于双关键字合并棒球赛事统计Numpy数组方案

这种结构化数据的多字段匹配合并操作,优先推荐用Pandas实现,语法简洁且边界处理完善,也可以根据需求选择纯Numpy原生实现:


方案1:使用Pandas实现(推荐)

import pandas as pd
import numpy as np

# 替换为你已经读取完成的两个Numpy数组:薪资数组、赛事统计数组
salary_arr = 你的薪资Numpy数组
stat_arr = 你的赛事统计Numpy数组

# 转为DataFrame并指定列名,字段名可根据你的实际情况调整
df_salary = pd.DataFrame(salary_arr, columns=['年份', '球员姓名', '薪资'])
df_stat = pd.DataFrame(stat_arr, columns=['年份', '球员姓名', '打击率', '打点'])

# 按年份+球员姓名双字段匹配做内连接,自动去重重复的匹配字段
merged_df = pd.merge(df_salary, df_stat, on=['年份', '球员姓名'], how='inner')

# 如需转回Numpy数组,调用values属性即可
merged_arr = merged_df.values

该方案完全符合双字段同时匹配的要求,只有年份和姓名同时一致的行才会被合并,合并结果中不会重复保留匹配用的公共字段。


方案2:纯Numpy原生实现

核心逻辑是为每行生成(年份, 球员姓名)的唯一匹配键,找到两个数组的共同键后拼接对应行的非重复字段:

import numpy as np

# 替换为你已经读取完成的两个Numpy数组
salary_arr = 你的薪资Numpy数组
stat_arr = 你的赛事统计Numpy数组

# 生成两个数组的匹配键集合
keys1 = np.array([tuple(row[:2]) for row in salary_arr])
keys2 = np.array([tuple(row[:2]) for row in stat_arr])

# 提取共同匹配键和对应的行索引
common_keys, idx1, idx2 = np.intersect1d(keys1, keys2, return_indices=True)

# 拼接行:保留薪资数组的全部字段 + 赛事数组去掉前两个公共字段的剩余内容
merged_arr = np.column_stack([salary_arr[idx1], stat_arr[idx2, 2:]])

注意事项

  • 若需要保留某一侧数组的全部行(含未匹配行),可将Pandas merge 方法的how参数调整为left/right/outer,分别对应左连接、右连接、全连接
  • 纯Numpy方案默认输出按匹配键排序的结果,如需保留原数组的行顺序,可自行调整索引匹配逻辑

内容的提问来源于stack exchange,提问作者A. Boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:03