Сравните два кадра данных на основе ключа - PullRequest
0 голосов
/ 18 июня 2019

У меня есть два кадра данных, df1 и df2, которые имеют одинаковые столбцы и большую часть времени одинаковые значения для каждого ключа.

Country   A   B   C   D   E   F   G   H   Key
Argentina xylo    262 4632    0   0   26.12   2   0   Argentinaxylo
Argentina phone   6860    155811  48  0   4375.87 202 0   Argentinaphone
Argentina land    507 1803728 2   117 7165.810566 3   154 Argentinaland
Australia xylo    7650    139472  69  0   16858.42    184 0   Australiaxylo
Australia mink    1284    2342788 1   0   39287.71    53  0   Australiamink


Country   A   B   C   D   E   F   G   H   Key
Argentina xylo    262 4632    0   0   26.12   2   0   Argentinaxylo
Argentina phone   6860    155811  48  0   4375.87 202 0   Argentinaphone
Argentina land    507 1803728 2   117 7165.810566 3   154 Argentinaland
Australia xylo    7650    139472  69  0   16858.42    184 0   Australiaxylo
Australia mink    1284    2342788 1   0   39287.71    53  0   Australiamink

Мне нужен фрагмент, который сравнивает ключи (ключ = столбец Страна + столбец A) в каждом кадре данных друг с другом и вычисляет процентную разницу для каждого столбца B-H, если таковые имеются. Если нет, выведите ничего.

1 Ответ

0 голосов
/ 19 июня 2019

Надеюсь, приведенный ниже код может помочь вам решить вашу проблему. Я сравнил оба набора данных на основе данных столбца Key и сгенерировал разницу их (B-H) столбцов соответственно. После этого, имея разницу в процентах, я просто сливаю оба набора данных в столбце Key, сравниваю разницу и получаю окончательный результат в столбце df3diff набора данных df3.

import pandas as pd

df1 = pd.DataFrame([['Argentina', 'xylo', 262 ,4632,    0 ,  0  , 26.12  , 2 , 0  , 'Argentinaxylo']
                    ,['Argentina', 'phone',6860,155811 , 48 , 0   ,4375.87 ,202, 0  , 'Argentinaphone']
                    ,['Argentina', 'land', 507 ,1803728, 2  , 117 ,7165.810,566, 3  , '154 Argentinaland']
                    ,['Australia', 'xylo', 7650,139472 , 69 , 0   ,16858.42,184, 0  , 'Australiaxylo']
                    ,['Australia', 'mink', 1284,2342788, 1  , 0   ,39287.71, 53,  0 , 'Australiamink']]
                   ,columns=['Country',   'A',   'B',   'C',   'D',   'E',   'F',   'G',   'H',   'Key'])

df1['df1BH'] = (df1['B']-df1['H'])/100.00
print(df1)


df2 = pd.DataFrame([['Argentina', 'xylo', 262 ,4632   , 0 ,  0   ,26.12   ,2  , 0   ,'Argentinaxylo']
                    ,['Argentina', 'phone',6860,155811 , 48,  0   ,4375.87 ,202, 0   ,'Argentinaphone']
                    ,['Argentina', 'land', 507 ,1803728, 2 ,  117 ,7165.810,566, 3   ,'154 Argentinaland']
                    ,['Australia', 'xylo', 97650,139472 , 69,  0   ,96858.42,184, 0   ,'Australiaxylo']
                    ,['Australia', 'mink', 1284,2342788, 1 ,  0   ,39287.71, 53,  0  ,'Australiamink']]
                   ,columns=['Country',   'A',   'B',   'C',   'D',   'E',   'F',   'G',   'H',   'Key'])
df2['df2BH'] = (df2['B']-df2['H'])/100.00
print(df2)



df3 = pd.merge(df1[['Key','df1BH']],df2[['Key','df2BH']], on=['Key'],how='outer')
df3['df3diff'] = df3['df1BH'] - df3['df2BH']
print(df3)

Выход:

                 Key  df1BH   df2BH  df3diff
0      Argentinaxylo   2.62    2.62      0.0
1     Argentinaphone  68.60   68.60      0.0
2  154 Argentinaland   5.04    5.04      0.0
3      Australiaxylo  76.50  976.50   -900.0
4      Australiamink  12.84   12.84      0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...