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)
我使用pandasapply
对列中的每个项执行相同的函数(在本例中是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)