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

如何将pd.date_range生成的日期范围与地点DataFrame做笛卡尔积合并?

解决方案

要实现每个地点与所有生成日期的一一对应,本质是求日期数据集和地点数据集的笛卡尔积(全交叉连接),用Pandas可以通过以下两种方法快速实现:

方法一:使用merge(how='cross')(推荐,Pandas 1.2.0+支持)

这是最直接的方式,Pandas原生支持交叉连接:

import pandas as pd

# 1. 生成日期范围并转为DataFrame
dates = pd.date_range(start='2022-10-16', end='2022-10-19')
dates_df = pd.DataFrame({'Date': dates})

# 2. 处理原地点DataFrame(若有重复地点可先去重)
# 示例原DataFrame
df = pd.DataFrame({'Location': ['A', 'B', 'C']})
# 若原数据存在重复地点,执行去重:df = df[['Location']].drop_duplicates()

# 3. 执行交叉连接
result = pd.merge(dates_df, df, how='cross')

方法二:通过虚拟键实现(兼容低版本Pandas)

如果你的Pandas版本低于1.2.0,可以通过添加临时虚拟键完成连接:

import pandas as pd

# 1. 生成日期DataFrame并添加虚拟键
dates = pd.date_range(start='2022-10-16', end='2022-10-19')
dates_df = pd.DataFrame({'Date': dates})
dates_df['dummy_key'] = 1

# 2. 处理地点DataFrame并添加相同虚拟键
df = pd.DataFrame({'Location': ['A', 'B', 'C']})
df['dummy_key'] = 1

# 3. 合并后删除虚拟键
result = pd.merge(dates_df, df, on='dummy_key').drop('dummy_key', axis=1)

执行后result即为每个地点对应全部日期的结果表,示例结构如下:

DateLocation
2022-10-16A
2022-10-16B
2022-10-16C
2022-10-17A
......

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:21:42