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

基于pd.date_range生成逐日期行:应当使用Merge、Join还是Concat?

Pandas实现两个DataFrame笛卡尔积的方案选择

你需要实现的是两个无关联字段DataFrame的笛卡尔积(即所有行两两组合),三个方法中**优先使用merge**实现,操作最简便,join和concat都需要额外处理逻辑,不推荐。

你已完成的步骤

1. 生成日期DataFrame

代码如下:

df_dates = pd.DataFrame({'date_prediciton':pd.date_range(start='2021-08-01', end='2021-08-31', freq='W-SUN')})
df_dates.head()

输出样例:

date_prediciton
02021-08-01
12021-08-08
22021-08-15
32021-08-22
42021-08-29

2. 生成客户信息DataFrame

代码如下:

client = ['101', '102', '103', '104']
df_clients = pd.DataFrame(data=client, columns=['client'])
df_clients.head()

输出样例:

client
0101
1102
2103
3104

具体实现代码

给两个DataFrame添加一个值全部相同的临时连接键,用merge按该键合并后删除临时键即可:

# 添加临时公共键
df_dates['tmp_key'] = 0
df_clients['tmp_key'] = 0

# 合并得到笛卡尔积,删除临时键
df_result = pd.merge(df_clients, df_dates, on='tmp_key').drop('tmp_key', axis=1)

最终结果共20行(4个客户×5个日期),每个客户都会匹配到全部的5个日期,符合需求。

另外两个方法不推荐的原因

  • concat是沿指定轴做数据拼接,默认不会做行交叉匹配,要实现笛卡尔积需要手动做数据重复、拼接操作,步骤繁琐效率低
  • join是基于索引的合并操作,要实现笛卡尔积需要先将两个DataFrame的索引都设置为相同的常数值,合并后再重置索引,操作步骤比merge多

内容的提问来源于stack exchange,提问作者Kleiton Marques Dos Reis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:48:02