Как я могу сравнить два фрейма данных в пандах и обновить значения на основе ключей? - PullRequest
0 голосов
/ 19 января 2019

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

import numpy
import pandas as pd

temp = pd.read_csv('.\\..\\..\\test.csv')
temp2 = pd.read_excel('.\\..\\..\\main.xlsx')

lenOfFile = len(temp.iloc[:, 1])
lenOfFile2 = len(temp2.iloc[:, 1])
dict1 = {}
dict2 = {}

for i in range(lenOfFile):
    dict1[temp.iloc[i, 0]] = temp.iloc[i, 1]

for i in range(lenOfFile2):
    dict2[temp2.iloc[i, 0]] = temp2.iloc[i, 1]

for i in dict1:
    if i in dict2:
        dict1[i] = dict2[i]
    else:
        dict1[i] = "Not in dict2"

Я хочутакое же поведение, как и то, что я написал.

1 Ответ

0 голосов
/ 19 января 2019

Вы должны поставить минимальный, полный и проверяемый пример . Пожалуйста, убедитесь, что в будущем мы сможем запустить ваш код, просто вставив его в IDE. Я потратил слишком много времени на этот вопрос, ха-ха

import pandas as pd

temp = pd.DataFrame({'A' : [20, 4, 60, 4, 8], 'B' : [2, 4, 5, 6, 7]})
temp2 = pd.DataFrame({'A' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'B' : [1, 2, 3, 10, 5, 6, 70, 8, 9, 10]})
print(temp)
print(temp2)
#     A  B
# 0  20  2
# 1   4  4
# 2  60  5
# 3   4  6
# 4   8  7

#     A   B
# 0   1   1
# 1   2   2
# 2   3   3
# 3   4  10
# 4   5   5
# 5   6   6
# 6   7  70
# 7   8   8
# 8   9   9
# 9  10  10

# Make a mapping of the values of our second mask.
mapping = dict(zip(temp2['A'], temp2['B']))

#   We apply the mapping to each row. If we find the occurence, replace, else, default.
temp['B'] = temp['A'].apply(lambda x:mapping[x] if x in mapping else 'No matching')
print(temp)
#     A            B
# 0  20  No matching
# 1   4           10
# 2  60  No matching
# 3   4           10
# 4   8            8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...