python中的fuzzyjoin

python中的fuzzyjoin,python,pandas,Python,Pandas,fuzzyjoin是一个R库,它允许基于函数进行连接,而不是基于ID的相等性。我想知道在Python中是否可以做同样的事情。例如,我可能想做一个基于两个不等式的连接。我有以下数据帧: 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'] ))

fuzzyjoin
是一个R库,它允许基于函数进行连接,而不是基于ID的相等性。我想知道在Python中是否可以做同样的事情。例如,我可能想做一个基于两个不等式的连接。我有以下数据帧:

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\ux
x是的,在python中也可以这样做。可按以下方式进行:

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['category'] = df['x'].apply(lambda x: other_df.loc[(other_df['min_x'] <= x) & (other_df['max_x'] >= x), 'category'].item())

print(df)
将熊猫作为pd导入
df=pd.数据帧(dict(
x=范围(10)
))
其他_df=局部数据帧(dict(
min_x=[0,6],
max_x=[5,10],
类别=['a','b']
))
df['category']=df['x'].apply(lambda x:other_df.loc[(other_df['min_x']=x),'category'].item())
打印(df)

我使用pandas
apply
对列中的每个项执行相同的函数(在本例中是lambda函数)。在这个apply函数中,我执行了
loc
函数,根据您的
other_df
中的条件查找值,并使用这些值构建了一个新列。

只是确保您的预期输出没有错误,但我不认为x=5可以具有category=b,因为b的最小值x是6您是对的,换了
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['category'] = df['x'].apply(lambda x: other_df.loc[(other_df['min_x'] <= x) & (other_df['max_x'] >= x), 'category'].item())

print(df)