Python如何删除与另一DataFrame的name列值重合的目标行
实现代码
你可以通过pandas的布尔索引配合isin()方法快速完成需求,完整可运行代码如下:
import pandas as pd # 构造示例DataFrame 1 df1 = pd.DataFrame( data=[ ["2015-01-02", "Adam", 1], ["2015-02-02", "David", 2], ["2015-02-02", "Mila", 2], ["2015-03-02", "Harshan", 2], ["2015-03-02", "Hardik", 2], ["2015-03-02", "Alex", 3], ], columns=["Date", "name", "Age"] ) # 构造示例DataFrame 2 df2 = pd.DataFrame( data=[ ["2015-01-02", "Jadeja", 1], ["2015-02-02", "Dravid", 2], ["2015-02-02", "Dhoni", 2], ["2015-03-02", "Hrithik", 2], ["2015-03-02", "Hardik", 2], ["2015-03-02", "Alex", 3], ], columns=["Date", "name", "Age"] ) # 核心筛选逻辑 # 大数据量场景下建议把df2['name']转成set提升查询速度:isin(set(df2['name'])) df_result = df1[~df1["name"].isin(df2["name"])].reset_index(drop=True) print(df_result)
代码说明
df1["name"].isin(df2["name"])会为df1的每一行返回布尔值,当前行name存在于df2的name列时返回True,否则返回False- 运算符
~代表取反,筛选出上述布尔值为False的行,也就是name不存在于df2的行 reset_index(drop=True)用于重置结果的行序号,和预期输出的索引格式保持一致,不需要可以删除
运行上述代码后输出结果和你给出的预期完全一致:
Date name Age 0 2015-01-02 Adam 1 1 2015-02-02 David 2 2 2015-02-02 Mila 2 3 2015-03-02 Harshan 2
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

