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

如何在Pandas中按索引规则合并不同大小的DataFrame?

Pandas实现按索引匹配填充的合并操作

首先构造示例中的两个DataFrame:

import pandas as pd

# 构建DataFrame1
df1 = pd.DataFrame(
    {'value1': ['one', 'two', 'three', 'four', 'five', 'six', 'seven']},
    index=pd.Index([1, 2, 3, 4, 5, 6, 7], name='index1')
).reset_index()

# 构建DataFrame2
df2 = pd.DataFrame(
    {'value2': ['just', 'done']},
    index=pd.Index([3, 6], name='index2')
).reset_index()

使用merge_asof可以高效实现需求中的匹配逻辑,它会为左表的每个索引值,匹配右表中小于等于该索引的最大对应值,正好符合"index1>=index2时匹配对应value2"的要求:

# 执行匹配合并
df3 = pd.merge_asof(
    df1,
    df2,
    left_on='index1',
    right_on='index2',
    direction='backward'  # 指定取小于等于左索引的最大右索引对应值
)

# 整理列名并替换空值
df3 = df3.rename(columns={'index1': 'index'}).drop(columns='index2')
df3['value2'] = df3['value2'].fillna('<none>')

# 输出结果
print(df3)

运行后得到的结果与需求一致:

index value1 value2
0      1    one  <none>
1      2    two  <none>
2      3  three    just
3      4   four    just
4      5   five    just
5      6    six    done
6      7  seven    done

补充说明

  • merge_asof要求右表的匹配键(这里是index2)必须是已排序的,示例中df2的索引已经是升序,无需额外处理;如果未排序,需要先执行df2.sort_values('index2', inplace=True)。
  • 如果不想使用merge_asof,也可以通过将df2的索引作为分界点,结合pd.cut和map实现,但merge_asof在性能和代码简洁性上更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:45:32