Python - заменить значения в фрейме данных на основе другого соответствия фрейма данных - PullRequest
0 голосов
/ 18 октября 2018

Предположим, что у меня есть 2 фрейма данных Python2 с именами A и B, как показано ниже.Как заменить столбец Value во фрейме данных A на основе совпадений идентификатора столбца и месяца из B?Любые идеи?

Спасибо

Рамка данных A:

ID  Month   City    Brand   Value
1   1   London  Unilever    100
1   2   London  Unilever    120
1   3   London  Unilever    150
1   4   London  Unilever    140
2   1   NY  JP Morgan   90
2   2   NY  JP Morgan   105
2   3   NY  JP Morgan   100
2   4   NY  JP Morgan   140
3   1   Paris   Loreal  60
3   2   Paris   Loreal  75
3   3   Paris   Loreal  65
3   4   Paris   Loreal  80
4   1   Tokyo   Sony    100
4   2   Tokyo   Sony    90
4   3   Tokyo   Sony    85
4   4   Tokyo   Sony    80

Рамка данных B:

ID  Month   Value
2   1   100
3   3   80

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Используйте merge с левым соединением и замените отсутствующие значения на исходные значения на fillna:

df = df1.merge(df2, on=['ID', 'Month'], how='left', suffixes=('_',''))
df['Value'] = df['Value'].fillna(df['Value_']).astype(int)
df = df.drop('Value_', axis=1)
print (df)
    ID  Month    City      Brand  Value
0    1      1  London   Unilever    100
1    1      2  London   Unilever    120
2    1      3  London   Unilever    150
3    1      4  London   Unilever    140
4    2      1      NY  JP Morgan    100
5    2      2      NY  JP Morgan    105
6    2      3      NY  JP Morgan    100
7    2      4      NY  JP Morgan    140
8    3      1   Paris     Loreal     60
9    3      2   Paris     Loreal     75
10   3      3   Paris     Loreal     80
11   3      4   Paris     Loreal     80
12   4      1   Tokyo       Sony    100
13   4      2   Tokyo       Sony     90
14   4      3   Tokyo       Sony     85
15   4      4   Tokyo       Sony     80
0 голосов
/ 18 октября 2018

Объедините их, а затем удалите неиспользуемые поля:

C = pd.merge(A[['ID', 'Month', 'City', 'Brand']],B, on=['ID', 'Month'])
C = C[['ID', 'Month', 'City', 'Brand', 'Value']]

Это должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...