基于近似或精确匹配合并两个Pandas数据框架

3

以下是我想要合并的数据框示例。

#!/usr/bin/env python

import pandas as pd

countries   = ['Germany', 'France', 'Indonesia']
rank_one    = [1, 5, 7]
capitals    = ['Berlin', 'Paris', 'Jakarta']
df1         = pd.DataFrame({'country': countries,
                            'rank_one': rank_one,
                            'capital': capitals})

df1 = df1[['country', 'capital', 'rank_one']]    

population = ['8M', '82M', '66M', '255M']
rank_two   = [0, 1, 6, 9]
df2        = pd.DataFrame({'population': population,
                           'rank_two': rank_two})

df2        = df2[['rank_two', 'population']]

我希望你能够基于精确或近似匹配将这两个数据框合并。

如果rank_two等于rank_one

或者

rank_two是从rank_one开始最接近且比它大的数字

例如:

df1:

     country  capital  rank_one
0    Germany   Berlin         1
1     France    Paris         5
2  Indonesia  Jakarta         7

df2 :

   rank_two population
0         0         8M
1         1        82M
2         6        66M
3         9       255M

df3_result :

     country  capital  rank_one  rank_two population
0    Germany   Berlin         1         1        82M
1     France    Paris         5         6        66M
2  Indonesia  Jakarta         7         9       255M
2个回答

6

通过使用merge_asof函数来合并数据。

pd.merge_asof(df1,df2,left_on='rank_one',right_on='rank_two',direction='forward')
Out[1206]: 
     country  capital  rank_one  rank_two population
0    Germany   Berlin         1         1        82M
1     France    Paris         5         6        66M
2  Indonesia  Jakarta         7         9       255M

2
您可以使用pandas的“merge_asof”函数。
pd.merge_asof(df1, df2, left_on="rank_one", right_on="rank_two", direction='forward')

如果您想按最接近的方式合并,并且不介意它是更高还是更低,您可以使用:

direction="nearest"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接