如何合并两个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
相关产品推荐
相关产品推荐

