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

基于指定列匹配索引值合并NumPy数组

解决方案:合并多组年份对齐的NumPy数组

针对你需要将多个年份-测量值数组合并为统一年份索引数组的需求,这里提供两种实用方法:


方法一:用Pandas快速实现(推荐)

Pandas的索引对齐机制天生适合这类任务,代码简洁且易维护:

import numpy as np
import pandas as pd

# 输入数据
arr1 = np.array([[1920, 1921, 1922, 1924, 1925], [23, 54, 23, 54, 65]]).T
arr2 = np.array([[1922, 1923, 1924, 1925, 1926], [12, 43, 17, 42, 87]]).T

# 将每个数组转为DataFrame,以年份为索引
df1 = pd.DataFrame(arr1, columns=["year", "arr1"]).set_index("year")
df2 = pd.DataFrame(arr2, columns=["year", "arr2"]).set_index("year")

# 合并DataFrame,自动对齐年份,缺失值填充NaN
merged_df = pd.concat([df1, df2], axis=1).sort_index().reset_index()

# 输出格式化结果
print(merged_df.to_string(index=False))

# 若需要转回NumPy数组:
# result_array = merged_df.to_numpy()

运行后输出:

year  arr1  arr2
1920    23   NaN
1921    54   NaN
1922    23    12
1923   NaN    43
1924    54    17
1925    65    42
1926   NaN    87

方法二:纯NumPy实现(无依赖)

如果不想引入Pandas,可以用NumPy的数组操作完成:

import numpy as np

# 输入数据
arr1 = np.array([[1920, 1921, 1922, 1924, 1925], [23, 54, 23, 54, 65]]).T
arr2 = np.array([[1922, 1923, 1924, 1925, 1926], [12, 43, 17, 42, 87]]).T

# 收集所有唯一年份并排序
all_years = np.unique(np.concatenate([arr[:, 0] for arr in [arr1, arr2]]))
all_years.sort()

# 初始化结果数组:第一列存年份,其余列存对应测量值,默认填充NaN
result = np.full((len(all_years), 1 + len([arr1, arr2])), np.nan)
result[:, 0] = all_years

# 遍历每个输入数组,填充对应测量值
for col_idx, arr in enumerate([arr1, arr2], start=1):
    # 找到当前数组年份在总年份列表中的位置
    year_positions = np.searchsorted(all_years, arr[:, 0])
    # 填充测量值到对应列
    result[year_positions, col_idx] = arr[:, 1]

# 格式化输出结果
print("year  arr1  arr2")
for row in result:
    year = int(row[0])
    val1 = f"{row[1]:.0f}" if not np.isnan(row[1]) else "nan"
    val2 = f"{row[2]:.0f}" if not np.isnan(row[2]) else "nan"
    print(f"{year}  {val1:<4} {val2}")

关键说明

  • 避免了低效的逐行循环匹配,用np.searchsorted快速定位年份位置,效率更高
  • np.full初始化数组时统一填充NaN,确保缺失值位置正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:10:36