Python 基于两个数据帧之间的比较匹配创建列
我有一个数据框a,它有一列叫做a['Income'],另一个数据框B有两列-B['Income']和B['category']。我需要将A['Income']与B['Income']进行比较,并创建一个['category'],这样, 当['Income']1000时,['category']=0.1 下面是我正在尝试的,但我无法开发将相应值分配给新列的逻辑。它是一个类似于字典的映射,但没有完全相等,需要定义一个范围Python 基于两个数据帧之间的比较匹配创建列,python,pandas,Python,Pandas,我有一个数据框a,它有一列叫做a['Income'],另一个数据框B有两列-B['Income']和B['category']。我需要将A['Income']与B['Income']进行比较,并创建一个['category'],这样, 当['Income']1000时,['category']=0.1 下面是我正在尝试的,但我无法开发将相应值分配给新列的逻辑。它是一个类似于字典的映射,但没有完全相等,需要定义一个范围 for e in A.Income: print(e) l=[] fo
for e in A.Income:
print(e)
l=[]
for j,k in zip(B.Income, B.category):
if e<=j:
l.append(k)
else:
pass
p.append(B[B['Income']==l[0]].category.values)
brack=list(chain.from_iterable(p))
A['category']=brack
尝试使用merge\u asof
更新以匹配输出
s=pd.merge_asof(A.reset_index().sort_values('Income'),B,on='Income',direction='forward').\
dropna().set_index('index').sort_index()
s.loc[s.Income<1000,'category']=0.1
s
Income category
index
0 1000 1.1
1 1234 1.2
2 3007 1.3
3 4569 1.4
4 7065 2.2
5 1456 1.2
6 2980 1.3
8 900 0.1
9 489 0.1
尝试使用merge\u asof
更新以匹配输出
s=pd.merge_asof(A.reset_index().sort_values('Income'),B,on='Income',direction='forward').\
dropna().set_index('index').sort_index()
s.loc[s.Income<1000,'category']=0.1
s
Income category
index
0 1000 1.1
1 1234 1.2
2 3007 1.3
3 4569 1.4
4 7065 2.2
5 1456 1.2
6 2980 1.3
8 900 0.1
9 489 0.1
我不敢相信我不知道这种方法的存在。。合并。。这是一个绝妙的解决方案,从来都不知道!非常感谢@YOBEN_S我相信您需要将方向参数设置为“最近”,然后替换上的类别。我不相信我不知道该方法存在。www。。合并。。这是一个绝妙的解决方案,从来都不知道!非常感谢@我认为您需要将方向参数设置为“最近”,然后替换上的类别
s=pd.merge_asof(A.reset_index().sort_values('Income'),B,on='Income',direction='forward').\
dropna().set_index('index').sort_index()
s.loc[s.Income<1000,'category']=0.1
s
Income category
index
0 1000 1.1
1 1234 1.2
2 3007 1.3
3 4569 1.4
4 7065 2.2
5 1456 1.2
6 2980 1.3
8 900 0.1
9 489 0.1