Объединить два кадра данных Pandas на основе приблизительного или точного соответствия - PullRequest
0 голосов
/ 24 сентября 2018

Ниже приведен пример 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']]

Я хочу объединить оба DataFrames на основе точного или приблизительного соответствия.

, если 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

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы можете использовать функцию панд 'merge_asof'

pd.merge_asof(df1, df2, left_on="rank_one", right_on="rank_two", direction='forward')

в качестве альтернативы, если вы хотите объединить по ближайшему, и вы не возражаете, если оно выше или ниже, вы можете использовать:

direction="nearest"
0 голосов
/ 24 сентября 2018

Используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...