fuzzyjoin是一个R库,它允许基于函数进行连接,而不是is的相等。我想知道在Python中是否可以做到同样的事情。例如,我可能想要基于两个不等式进行连接。我有以下DataFrames:
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']
))我希望离开join df和other_df,这样x >= min_x和x <= max_x就可以获得以下数据:
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在熊猫身上有什么简单的方法吗?
发布于 2020-06-05 11:02:04
是的,在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)我使用熊猫apply对列中的每一项执行相同的函数(在本例中是lambda函数)。在这个应用函数中,我执行了loc函数,根据来自other_df的条件查找值,并使用这些值构建了一个新列。
https://stackoverflow.com/questions/62213028
复制相似问题