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

如何合并两个DataFrame并保留多行值?merge函数是否适用?

用Pandas的merge方法实现目标DataFrame是完全合适的

针对你的场景,merge是处理这类基于共同列匹配并过滤无关数据的标准方案,比join更直观(因为join默认按索引匹配,而你需要按category列匹配)。

具体代码实现

先构造符合你描述的示例数据:

import pandas as pd

# DataFrame 1
df1 = pd.DataFrame({
    'animal': ['Dog', 'Cat', 'Bird', 'Fish'],
    'category': ['Mammal', 'Mammal', 'Avian', 'Aquatic'],
    'Add-Date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04']
})

# DataFrame 2
df2 = pd.DataFrame({
    'category': ['Mammal', 'Avian'],
    'Tier': ['1', '2']
})

然后用merge实现目标:

# 内连接:只保留两边都存在的category,自动移除无关项(比如这里的Aquatic)
target_df = pd.merge(df1, df2, on='category', how='inner')

print(target_df)

输出结果(即目标DataFrame)

animal category   Add-Date Tier
0    Dog    Mammal 2023-01-01    1
1    Cat    Mammal 2023-01-02    1
2   Bird     Avian 2023-01-03    2

关键参数说明

  • on='category':指定用于匹配的共同列
  • how='inner':内连接模式,只保留两个DataFrame中category值都存在的行,自动过滤掉df1中不在df2里的category(比如示例中的Aquatic),完全符合你"移除无关category"的需求

如果你的需求是保留df1的所有行,但给无匹配的category留空Tier,可以改用how='left',之后再按需过滤空值:

# 左连接后过滤掉无Tier的行,效果和inner一致
target_df_left = pd.merge(df1, df2, on='category', how='left').dropna(subset=['Tier'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:18:50