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