Python可以在一个步骤中组合合并和筛选

2024-05-19 10:08:41 发布

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

在以下代码中:

df_emp11 = pd.read_table("C...PyCharm2018.3/config/scratches/dataset3",  engine="python", sep = ',', usecols = ['EmpID','Name','Salary'])
df_emp12 = pd.read_table("...PyCharm2018.3/config/scratches/dataset4",  engine="python" , sep = ',',usecols = ['EmpID','Name','Salary'])
df = pd.merge(df_emp11, df_emp12, on=['EmpID'] , how='outer', indicator=True)
df = df[df.Salary_x !=df.Salary_y]

有没有一种方法可以编写类似SQL的查询,而不是在步骤中使用pd.merge并在最后一步中过滤掉记录,如:

Select * from df_emp11 left join df_emp12 
on df_emp11.Name = df_emp12.Name
where df_emp11.Salary != df_emp12.Salary

我正在努力使它的内存效率

示例数据:set1:

EmpID,Name,Salary
123,Allan,8890
234,Thomas,9990
345,Bill,7789
445,Bill,9980

Set2:

EmpID,Name,Salary
123,Allan,8890
234,Thomas,9990
345,Bill,778

预期产出:

EmpID Name_x  Salary_x Name_y  Salary_y    
345   Bill      7789   Bill     778.0      
445   Bill      9980    NaN       NaN  

Tags: nameconfigdfreadtableengineseppd
1条回答
网友
1楼 · 发布于 2024-05-19 10:08:41

除了用于联接表的列之外,查询看起来很好。 在pandas中,您使用了EmpID作为合并键,但您的查询使用了Name列。所以查询应该是这样的(虽然我没有测试):

SELECT df_emp11.EmpID, df_emp11.Name, df_emp11.Salary, df_emp12.Name, df_emp12.Salary
FROM df_emp11
LEFT JOIN df_emp12
ON df_emp11.EmpID = df_emp12.EmpID
WHERE df_emp11.Salary != df_emp12.Salary

另外,我不知道您使用的是什么SQL引擎。如果您碰巧使用了PostgreSQL,则必须引用包含大写字符的列名。例如df_emp11.EmpID=>df_emp12."EmpID"

相关问题 更多 >

    热门问题