如何使用数据帧中的每一行过滤查询

2024-04-29 03:26:16 发布

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

我遇到了一个无法解决的问题

我有这样一个熊猫的数据框:

    LastName FirstName Goals
0    Messi    Lionel    10

1   Donovan   Landon    7

2   Hazard     Eden     5

我需要对Teradata进行查询,从另一个表中获取数据,通过数据框中每个人的LastName和FirstName过滤结果,如下所示:

"Select * from Table1 where (LastName= 'Messi' and FirstName='Lionel) or (LastName='Donovan' and FirstName='Landon') or (LastName='Hazard' and FirstName='Eden')"

我尝试了一些循环,但我不能做到这一点,采取每一行,并添加或语句。有人有办法解决吗

提前谢谢


Tags: orand数据fromfirstnameselecthazardeden
1条回答
网友
1楼 · 发布于 2024-04-29 03:26:16

我们通常可以做merge

cond=pd.DataFrame({'FirstName':['Lionel','Landon','Eden'], 'LastName':['Messi','Donovan','Hazard']})
df=df.merge(cond, how='inner')
网友
2楼 · 发布于 2024-04-29 03:26:16

如果要检查一个表中多列的值与另一个表中多列的值,可以执行以下操作:

SELECT *
FROM Table1
WHERE (LastName, FirstName) IN (
  SELECT lastname, firstname
  FROM <some_table>
)

我不确定DataFrame是如何工作的,但是如果您可以在SQL的某些风格中访问DataFrame结果集中的(lastname, firstname)字段,请尝试将其粘贴到IN ()构造中

SQL Fiddle

网友
3楼 · 发布于 2024-04-29 03:26:16

这可以通过应用遮罩来解决

假设给定df:

条件1:(LastName='mesi'和FirstName='Lionel')

cond1 = df['LastName'].eq('Messi') & df['FirstName'].eq('Lionel')

条件2:(LastName='Donovan'和FirstName='Landon')

cond2 = df['LastName'].eq('Donovan') & df['FirstName'].eq('Landon')

其他名字也一样

然后使用loc选择:

df.loc[cond1 | cond2, :]

您可以添加任意多个条件。希望这有帮助

相关问题 更多 >