pandas数据框合并是否更多或更少?

时间:2017-03-28 01:54:58

标签: python pandas dataframe merge

现在我需要合并两个数据帧,条件大于(> =)。但合并只支持平等。有什么办法可以解决吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我不知道如何在pandas中使用类似的合并和连接语法来实现以下功能,

SELECT * 
FROM a 
INNER JOIN b 
ON a.column1 >= b.column1 AND a.column1 <= b.column2 

但上面的查询也可以隐式写成;

SELECT * 
FROM a, b 
WHERE a.column1 >= b.column1 AND a.column1 <= b.column2 

这基本上是旧语法,应该完全相同(性能明智)。它需要2个表(或交叉连接)的笛卡尔积,然后使用WHERE条件从中选择,这可以很容易地在pandas中实现。这可能对记忆有点沉重,但应该很快。

首先是FROM a, b子句(我们暂时在所有行中分配一个具有相同值的列,因此我们可以在它上交叉连接);

df = pd.merge(a.assign(key=0), b.assign(key=0), on='key').drop('key', axis=1)

然后使用布尔索引(我们的WHERE子句)对帧进行切片;

df[(df["column1_x"] >= df["column1_y"]) & (df["column1_x"] <= df["column2_y"])]

如果您不想要笛卡尔积,并且只想比较两个表的相同索引上的行,则可以像这样合并索引;

df = a.merge(b, left_index = True, right_index = True)
如果长度相同,则在轴1上

或连续;

df = pd.concat([a, b], axis=1)

再次使用布尔索引来消除结果;

df[(df["column1_x"] >= df["column1_y"]) & (df["column1_x"] <= df["column2_y"])]