基于另一个datafram的多个列筛选数据帧

2024-05-16 00:44:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

    ID1    ID2
0   foo    bar
1   fizz   buzz

还有一个像这样的人:

^{pr2}$

我想做的是过滤第二个dataframe,其中ID1和ID2匹配第一个dataframe中的一行,每当有匹配的时候,我就想从第一个dataframe中删除该行,以避免重复。这将生成如下所示的数据帧:

    ID1    ID2    Count    Code   
1   fizz   buzz     5        A
3   foo    bar      6        Z

我知道我可以通过嵌套循环来实现这一点,单步执行所有行,并在每次找到匹配项时手动从第一帧中删除一行,但我想知道是否有一种更像Python的方法来做到这一点。我对熊猫没有经验,所以可能有一个更干净的方法来做,我不知道。我以前用过.isin(),但不得不放弃它。每个ID对在dataframe中最多可以存在N次,我需要过滤后的帧包含一对的0到N个实例。在


Tags: 数据方法dataframefoocountbarcode手动
3条回答

或者试试这个?在

df.loc[(df.ID1.isin(df1.ID1))&(df.ID2.isin(df1.ID2)),:].drop_duplicates()


Out[224]: 
    ID1   ID2  Count Code
1  fizz  buzz      5    A
3   foo   bar      6    Z

试试这个:

df2.merge(df1[['ID1','ID2']])

如果两个df中的联接只有相同的列,则将^{}与{a2}一起使用:

df = pd.merge(df1,df2.drop_duplicates())
print (df)
    ID1   ID2  Count Code
0   foo   bar      6    Z
1  fizz  buzz      5    A

如果只在ID列中需要检查重复:

^{pr2}$

如果有更多列重叠,请添加参数on

df = pd.merge(df1, df2.drop_duplicates(), on=['ID1','ID2'])

如果不删除重复行:

df = pd.merge(df1,df2)
print (df)
    ID1   ID2  Count Code
0   foo   bar      6    Z
1   foo   bar      6    Z
2  fizz  buzz      5    A

相关问题 更多 >