R语言合并两张数据表并保留匹配重复项的实现需求
实现按Country字段的全组合匹配需求
你需要的是按Country字段进行分组的笛卡尔积连接,也就是将两张表中同属一个Country的所有行进行全组合匹配,以下是两种常用实现方案:
Pandas 实现代码
先构造示例数据,再通过merge方法完成连接:
import pandas as pd # 构造DF1数据 df1 = pd.DataFrame({ 'Country': ['FRANCE', 'FRANCE', 'ITALY', 'ITALY', 'SPAIN'], 'Y': [1, 1, 1, 1, 1], 'Freq': [0, 1, 2, 3, 4] }) # 构造DF2数据 df2 = pd.DataFrame({ 'Country': ['FRANCE', 'FRANCE', 'ITALY', 'SPAIN', 'SPAIN'], 'Z': [1, 1, 1, 2, 1], 'T': [0, 1, 2, 3, 4] }) # 按Country字段进行内连接,自动生成同Country的全组合 df_final = pd.merge(df1, df2, on='Country', how='inner') print(df_final)
运行后会输出你期望的最终数据表。
SQL 实现代码
如果用SQL处理,直接通过INNER JOIN按Country字段匹配即可:
-- 创建DF1表并插入数据 CREATE TABLE DF1 ( Country VARCHAR(20), Y INT, Freq INT ); INSERT INTO DF1 VALUES ('FRANCE', 1, 0), ('FRANCE', 1, 1), ('ITALY', 1, 2), ('ITALY', 1, 3), ('SPAIN', 1, 4); -- 创建DF2表并插入数据 CREATE TABLE DF2 ( Country VARCHAR(20), Z INT, T INT ); INSERT INTO DF2 VALUES ('FRANCE', 1, 0), ('FRANCE', 1, 1), ('ITALY', 1, 2), ('SPAIN', 2, 3), ('SPAIN', 1, 4); -- 执行连接查询,生成全组合结果 SELECT df1.Country, df1.Y, df1.Freq, df2.Z, df2.T FROM DF1 df1 INNER JOIN DF2 df2 ON df1.Country = df2.Country;
内容的提问来源于stack exchange,提问作者Rami Sma
相关产品推荐
相关产品推荐

