首页 > 解决方案 > 使用 Numpy 过滤两个数据帧

问题描述

我有两个数据框。它们的结构如下:

自由度

ID
一种 3
4

自由度

ID 价值
一种 3 100
4 300
4 100
4 150
一种 3 200
一种 3 400

我需要从 df B 获取 df A 值中的字母和 ID 的每个组合,然后运行异常值函数。

目前我正在使用超过 40,000 行的 A 和 4,500,000 的列表 b

a['Results'] =  a.apply(lambda x: outliers(b[(b['Letter']==x['Letter']) & (b['ID']==x['ID'])]['value'].to_list()),axis=1)

正如你可以想象的那样,这将永远持续下去。我是否犯了一些错误或可以改进此代码的东西?

标签: pythonpandasnumpy

解决方案


我首先使用[Letter, ID]in将每个组合聚合df_b到一个列表中.groupby,然后合并df_a并应用您的outliers函数。应该更快:

df_a["results"] = df_a.merge(
    df_b.groupby(["Letter", "ID"])["Value"].agg(list),
    left_on=["Letter", "ID"],
    right_index=True,
    how="left",
)["Value"].apply(outliers)
print(df_a)

推荐阅读