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

如何基于索引合并Numpy二维数组中相同x值对应的y值?

刚好遇到过类似的需求,给你两个简洁高效的实现方案,尤其适配你提到的Timestamp类型场景:

方法一:纯Numpy实现(适合数值型x,Timestamp可兼容转换)

如果你的x是数值类型,用Numpy的原生方法效率极高;如果是Timestamp类型,只需要先把它转成对应的整数时间戳,处理完再转回去就行。

针对你的示例数组,代码如下:

import numpy as np

# 你的示例数组
arr = np.array([[0,0],[1,1],[2,4],[4,6],[2,2],[3,7],[1,9],[4,16],[5,1],[5,2],[0,0]])
x = arr[:, 0]
y = arr[:, 1]

# 获取唯一x值和分组索引
unique_x, group_indices = np.unique(x, return_inverse=True)
# 按索引分组求和y值
summed_y = np.bincount(group_indices, weights=y)
# 组合成结果数组
result = np.column_stack((unique_x, summed_y))
print(result)

如果x是Timestamp类型,只需要加一步类型转换:

from pandas import Timestamp
import numpy as np

# 构造含Timestamp的测试数组
ts_arr = np.array([[Timestamp('2018-01-01'), 1], 
                   [Timestamp('2018-01-01'), 3], 
                   [Timestamp('2018-01-02'), 5]], dtype=object)
x_ts = ts_arr[:, 0]
y_ts = ts_arr[:, 1].astype(int)

# 将Timestamp转为int64格式的时间戳数值
x_int = np.array([ts.value for ts in x_ts])
# 重复上面的分组求和步骤
unique_x_int, group_indices = np.unique(x_int, return_inverse=True)
summed_y_ts = np.bincount(group_indices, weights=y_ts)
# 再把int64转回Timestamp
unique_x_ts = np.array([Timestamp(int(ts_int)) for ts_int in unique_x_int])
# 得到最终结果
result_ts = np.column_stack((unique_x_ts, summed_y_ts))
print(result_ts)
方法二:用Pandas实现(直观简洁,完美支持Timestamp)

Pandas对时间序列的处理天生友好,尤其是Timestamp类型,不需要额外转换,代码可读性也更强,非常适合你的实际场景:

针对示例数组的代码:

import pandas as pd
import numpy as np

# 你的示例数组
arr = np.array([[0,0],[1,1],[2,4],[4,6],[2,2],[3,7],[1,9],[4,16],[5,1],[5,2],[0,0]])
# 转成DataFrame
df = pd.DataFrame(arr, columns=['x', 'y'])
# 按x分组求和y,再重置索引
summed_df = df.groupby('x')['y'].sum().reset_index()
# 转回numpy数组
result = summed_df.to_numpy()
print(result)

针对Timestamp类型的场景,直接用就行,完全不需要额外转换:

from pandas import Timestamp
import pandas as pd
import numpy as np

# 含Timestamp的测试数组
ts_arr = np.array([[Timestamp('2018-01-01'), 1], 
                   [Timestamp('2018-01-01'), 3], 
                   [Timestamp('2018-01-02'), 5]], dtype=object)
df_ts = pd.DataFrame(ts_arr, columns=['x', 'y'])
# 确保y列是数值类型(避免object类型求和出错)
df_ts['y'] = df_ts['y'].astype(int)
# 分组求和
summed_df_ts = df_ts.groupby('x')['y'].sum().reset_index()
# 转回numpy数组
result_ts = summed_df_ts.to_numpy()
print(result_ts)

方案选择建议

  • 如果你的数据量极大且x是纯数值类型,优先选Numpy方案,效率更高;
  • 如果x是Timestamp类型,或者追求代码简洁易读,Pandas方案是最优解,几乎不需要额外处理就能完美适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:50:39