Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于两个数据帧之间的比较匹配创建列_Python_Pandas - Fatal编程技术网

Python 基于两个数据帧之间的比较匹配创建列

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

我有一个数据框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=[]    
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