说明
pd.merge_ordered()专门用于有序数据(如时间序列)的合并,与merge()类似但结合了前向填充(fill method)功能,适用于处理不等间隔的时间序列连接。
语法
pd.merge_ordered(
left, # 左侧 DataFrame
right, # 右侧 DataFrame
on=None, # 公共有序键(通常是时间)
left_on=None, # 左侧键列
right_on=None, # 右侧键列
left_index=False, # 使用左侧索引作为键
right_index=False, # 使用右侧索引作为键
how='outer', # 连接方式
suffixes=('_x', '_y'), # 重叠列后缀
fill_method=None, # 前向填充方法,如 'ffill'
keep_* = ... # 其他高级参数(如 keep_...,pandas 2.x)
)说明
merge_ordered在 pandas 2.x 中的实参名称建议查阅当前版本帮助:pd.merge_ordered?以确认最新签名。
参数说明
| 参数 | 说明 | 默认 |
|---|---|---|
left / right | 待合并的两个 DataFrame | - |
on | 公共有序键(通常为日期/数值) | None |
how | 连接方式:'left'、'right'、'outer'、'inner' | 'outer' |
suffixes | 重叠列后缀 | ('_x', '_y') |
fill_method | 对合并后结果进行前向填充:'ffill'、'bfill' 或 None | None |
基础示例
import pandas as pd
left = pd.DataFrame({
'time': pd.to_datetime(['2026-08-01', '2026-08-03', '2026-08-05']),
'left_val': [1, 2, 3],
})
right = pd.DataFrame({
'time': pd.to_datetime(['2026-08-02', '2026-08-04']),
'right_val': [10, 20],
})
# outer join:保留所有时间点
print(pd.merge_ordered(left, right, on='time'))
# time left_val right_val
# 0 2026-08-01 1.0 NaN
# 1 2026-08-02 NaN 10.0
# 2 2026-08-03 2.0 NaN
# 3 2026-08-04 NaN 20.0
# 4 2026-08-05 3.0 NaNfill_method:前向填充
说明
合并后自动按有序键前向填充缺失值,是
merge_ordered的核心特色。
print(pd.merge_ordered(left, right, on='time', fill_method='ffill'))
# time left_val right_val
# 0 2026-08-01 1.0 NaN
# 1 2026-08-02 1.0 10.0 # left_val 前向填充
# 2 2026-08-03 2.0 10.0 # right_val 保持
# 3 2026-08-04 2.0 20.0
# 4 2026-08-05 3.0 20.0与 merge 的区别
merge_ordered vs merge
merge_ordered要求键有序,合并后在有序键上自动排序。- 支持
fill_method前向填充。- 通常用于时间序列的拼接与插值,而非一般表格合并。
与 merge_asof 的区别
merge_ordered vs merge_asof
merge_ordered:合并所有键(等值/外连接 + 可选填充)。merge_asof:近似匹配,每个左键只匹配一个最近的右键行。
🔗 相关链接
- 14.4 merge_asof() - 近似匹配
- 14.2 merge() - 等值合并
- index - 时间索引与有序数据