Python 如何根据基于另一个数据帧的条件提取一个数据帧的行

Python 如何根据基于另一个数据帧的条件提取一个数据帧的行,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧: df1 = pd.DataFrame({'Points':[1,2,3,4,5], 'ColX':[9,8,7,6,5]}) df1 Points ColX 0 1 9 1 2 8 2 3 7 3 4 6 4 5 5 df2 = pd.DataFrame({'Points':[2,5], 'Sum':[-1,1], 'ColY':[2,4]}) # ColY

我有两个数据帧:

df1 = pd.DataFrame({'Points':[1,2,3,4,5], 'ColX':[9,8,7,6,5]})
df1
    Points  ColX
0        1     9
1        2     8
2        3     7
3        4     6
4        5     5

df2 = pd.DataFrame({'Points':[2,5], 'Sum':[-1,1], 'ColY':[2,4]}) # ColY does not matter, I just added it to say that this dataframe can have other columns that the useful columns for this topic
df2
    Points  Sum  ColY
0        2   -1     2
1        5    1     4
我希望获得一个数据帧,其中包含df1行,其中:

  • df1中列点的值也在df2的列点中
  • df2中列总和的值介于0和2之间
因此,我希望得到这个数据帧(无论索引如何):

我尝试了以下方法,但无效:

df1[df1.merge(df2, on = 'Points')['Sum'] <= 2 and ['Sum']>=0] 
df1[df1.merge(df2,on='Points')['Sum']=0]
您能帮我找到正确的代码吗?

试试这个:

df1[df1['Points'].isin(df2.query('0 <= Sum <= 2')['Points'])]
解释:

  • df2.query('0用于布尔掩码,用于传递到另一个掩码的筛选,带有:

    您的解决方案应更改为用于筛选:

    df = df1.merge(df2, on = 'Points').query('0<=Sum<=2')[df1.columns]
    print (df)
       Points  ColX
    1       5     5
    
    df=df1.merge(df2,on='Points')。query('0也可以:

    df3 = df1.merge(df2, on='Points')
    result = df3[(df3.Sum >= 0) & (df3.Sum <= 2)]
    result
    
    df3=df1.merge(df2,on='Points')
    
    result=df3[(df3.Sum>=0)&(df3.Sum)感谢您提供的详细解决方案!感谢您的帮助!@Ewdlam-表达感谢的最佳方式是简单地向上投票一个答案(或选择它作为答案,就像您已经做的那样)。这个想法是尽量减少噪音并最大限度地增加有用的内容。否则,这里几乎每个帖子都会有“谢谢”评论。我们感谢您的礼貌。:-)谢谢您的帮助!
    df = df1[df1['Points'].isin(df2.loc[df2['Sum'].between(0,2), 'Points'])]
    print (df)
       Points  ColX
    4       5     5
    
    df = df1.merge(df2, on = 'Points').query('0<=Sum<=2')[df1.columns]
    print (df)
       Points  ColX
    1       5     5
    
    df3 = df1.merge(df2, on='Points')
    result = df3[(df3.Sum >= 0) & (df3.Sum <= 2)]
    result