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

如何实现numpy数组与pandas Series的笛卡尔积连接?

实现ids与dates的笛卡尔积DataFrame(向量化操作)

以下是几种无需遍历、基于pandas/numpy向量化操作的实现方法,都能高效生成你需要的结果:

方法一:利用MultiIndex.from_product(最简洁)

通过生成笛卡尔积的多级索引,直接转换为DataFrame:

import pandas as pd
import numpy as np

ids = np.array([1, 2])
dates = pd.Series([10032023, 10042023], name='date')

# 生成笛卡尔积多级索引,指定列名
multi_idx = pd.MultiIndex.from_product([ids, dates], names=['id', 'date'])
# 转换为DataFrame并重置索引
df = multi_idx.to_frame(index=False)

print(df)

输出结果和你预期的完全一致,且天然按date分组排序。

方法二:使用merge的cross连接(直观易懂)

pandas 1.2.0及以上版本支持how='cross'参数,直接实现两个DataFrame的笛卡尔积:

import pandas as pd
import numpy as np

ids = np.array([1, 2])
dates = pd.Series([10032023, 10042023], name='date')

# 将ids和dates分别转为DataFrame
df_ids = pd.DataFrame(ids, columns=['id'])
df_dates = dates.to_frame()

# 交叉合并生成笛卡尔积,再按date排序
df = df_ids.merge(df_dates, how='cross').sort_values('date').reset_index(drop=True)

print(df)

方法三:结合itertools.product构造DataFrame

用itertools生成笛卡尔积元组,再转为DataFrame,同样是高效的非遍历方式:

import pandas as pd
import numpy as np
from itertools import product

ids = np.array([1, 2])
dates = pd.Series([10032023, 10042023], name='date')

# 生成笛卡尔积元组列表
cartesian_data = list(product(ids, dates))
# 构造DataFrame并按date排序
df = pd.DataFrame(cartesian_data, columns=['id', 'date']).sort_values('date').reset_index(drop=True)

print(df)

这三种方法都避免了手动遍历赋值,利用pandas/numpy的内置向量化逻辑,在数据量较大时比循环方式效率高得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:28:12