python - Pandas 比较一个 DataFrame 和一个 ground truth DataFrame

标签 python pandas dataframe comparison

我有一个 DataFrame,其中包含无序 项目 ID 及其各自负责人的列表。我想将新数据框的值与基本事实进行比较,以验证新数据框中的所有项目 ID 是否都是;在 ground truth 中并且有相同的领导者。有时,新的 DataFrame 可能有不同的列名,但它们总是两个,而且总是表示同一件事。

例如ground truth DataFrame (df_gt):

Project ID          Leader
123                Owen Wilson
122                Samuel Jackson
145                Jack Black
134                Natalie Portman

虽然新的 DataFrame 可能是 (df_new):

Project             Leader
123                Owen Wilson
122                Henry Cavil
144                Natalie Portman
146                Jack Black

我想要的输出是在新 DataFrame 中发现的与基本事实的所有偏差的列表。在这种情况下:

错误 == [[122,亨利·卡维尔],[144,娜塔莉·波特曼],[146, jack ·布莱克]]

执行此操作以容纳多个潜在的新数据框的最简单方法是什么,每个数据框都有自己的列命名约定但具有相同的预期值。

最佳答案

另一种解决方案是使用 .mergeindicator=:

x = df1.merge(
    df2,
    left_on=["Project ID", "Leader"],
    right_on=["Project", "Leader"],
    indicator=True,
    how="right",
)

errors = (
    x.loc[x._merge.eq("right_only")]
    .apply(lambda x: [x["Project"], x["Leader"]], axis=1)
    .to_list()
)

print(errors)

打印:

[[122, 'Henry Cavil'], [144, 'Natalie Portman'], [146, 'Jack Black']]

关于python - Pandas 比较一个 DataFrame 和一个 ground truth DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69165490/

相关文章:

Python记录联动、模糊匹配和去重

python - Pandas 数据框属性错误 : 'DataFrame' object has no attribute 'design_info'

python - 获取按 A 列分组的 B 列的组大小和最小值

python - 从具有字典键的另一列创建 Pandas 数据框列

python - 添加列并选择总和最大的列

python - 实现基本高效 "Search"算法 : Python

Java 与Python 的recv() 网络函数的等价

python - 从 SQL 数据库中的 OHLC 数据中选择 7、14、20、50、200 天的价格。

python - 增加不存在索引的列表索引

python - 更改 matplotlib 中日期时间轴的格式