首页 > 解决方案 > 根据与其他数据帧的差异删除数据帧行

问题描述

我使用 4 个不同的模型分析了 1000 个观察结果。这些模型的结果存储在 4 个数据帧中,如下所示:

import pandas as pd

model_1 = pd.DataFrame(data={"observation_id": [0, 1, ..., 1000], 
                             "param_1": [0, 4, ..., 2]})

model_2 = pd.DataFrame(data={"observation_id": [0, 2, ..., 1000], 
                             "param_1": [1, 3, ..., 1]})

其他两个类似(数据帧中实际上还有更多参数)。

“observation_id”唯一地将模型的结果与观察结果匹配。因此,observation_id 为 0 给出了该特定观察的四个模型的结果。

问题是建模数据中存在差距。model_1 可能缺少observation_id 45,model_3 可能缺少observation_id 721。

如何创建四个新数据框,其中仅包含与所有 4 个数据集共有的观察 ID 相关的结果?

标签: python-3.xpandas

解决方案


这是使用mergewith的一种方法how='left'

from functools import reduce
p1 = reduce(lambda left,right: pd.merge(left,right,on='observation_id',how='left'), [df1,df2,df3,df4])

如果你只想要一个 df 而不是四个

from functools import reduce
df = reduce(lambda left,right: pd.merge(left,right,on='observation_id',how='inner'), [df1,df2,df3,df4])

推荐阅读