fuzzyjoin
是一个R库,它允许基于函数进行连接,而不是id的相等。我想知道同样的事情是否可以在Python中完成。例如,我可能想基于两个不等式进行连接。我有以下 Dataframe :
import pandas as pd
df = pd.DataFrame(dict(
x=range(10)
))
other_df = pd.DataFrame(dict(
min_x=[0, 6],
max_x=[5, 10],
category=['a', 'b']
))
我想左连接df
和other_df
,使得x >= min_x
和x <= max_x
,获得以下 Dataframe :
x category
0 0 a
1 1 a
2 2 a
3 3 a
4 4 a
5 5 a
6 6 b
7 7 b
8 8 b
9 9 b
有没有一种简单的方法可以在Pandas身上做到这一点?
2条答案
按热度按时间1zmg4dgp1#
在Python中也可以这样做。可按以下方式进行─
我使用pandas
apply
对列中的每个项执行相同的函数(在本例中是lambda函数)。在apply函数中,我执行了loc
函数,根据other_df
中的条件查找值,并使用这些值构建了一个新列。igetnqfo2#
一个有效的选择是使用janitor.conditional_join:
由于
other_df
的范围没有重叠,因此pd.merge_asof就足够了: