【问题标题】:Merge two Pandas DataFrames based on approximate or exact matches根据近似匹配或完全匹配合并两个 Pandas DataFrame
【发布时间】:2019-02-28 05:57:46
【问题描述】:

以下是我要合并的 DataFrames 示例。

#!/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']]

我想根据完全匹配或近似匹配合并两个 DataFrame。

如果rank_two is equal to rank_one

rank_two is the closest and next bigger number from 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

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    通过使用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"
      

      【讨论】:

        猜你喜欢
        • 2020-01-20
        • 2018-11-05
        • 1970-01-01
        • 2021-03-13
        • 2018-05-22
        • 2020-01-11
        • 1970-01-01
        • 2021-08-15
        • 2021-12-22
        相关资源
        最近更新 更多