обновление и объединение столбца в панде - PullRequest
0 голосов
/ 01 июня 2018

У меня есть столбец «A» в двух фреймах данных, скажем, df1 и df2.

df1:

|  ID  | A |  |
|------|---|--|
| ID1  | 5 |  |
| ID2  | 6 |  |
| ID3  | 7 |  |
| ID4  | 8 |  |

df2:

|  ID  | A |  |
|------|---|--|
| ID1  | 5 |  |
| ID2  | 1 |  |
| ID3  | 8 |  |
| ID5  | 7 |  |
| ID6  | 8 |  |
| ID7  | 9 |  |

Требуется обновление df1:

|  ID  | A |  |
|------|---|--|
| ID1  | 5 |  |
| ID2  | 1 |  |
| ID3  | 8 |  |
| ID4  | 8 |  |
| ID5  | 7 |  |
| ID6  | 8 |  |
| ID7  | 9 |  |

Я хочу обновить столбец 'A'в df1 со значениями из df2, если идентификатор находится в df2, иначе я хочу сохранить то же значение в df1.Более того, если в df2 есть новые идентификаторы, я хочу добавить новые значения в df1.

Я видел документацию по pd.DataFrame.update, в которой обновляются значения из df2 в df1, но это не так.не добавляет новые значения в df1.Любая помощь будет оценена.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 22 августа 2019

Вы можете сделать то же самое, используя метод слияния Панд.

Вы можете объединить df1 и df2 с помощью функции слияния следующим образом:

df = pd.merge(df2,df1, how ='outer')

Здесь я объединяю df2 сdf1.external использует объединение ключей из обоих информационных фреймов.Union заберет все ключи из df2 и только те ключи из df1, которые недоступны в df2.

enter image description here

Второй шаг - удалить дубликаты.строки с учетом столбца идентификатора.

df = df.drop_duplicates(subset=['ID'],keep='first')

При этом будут удалены все повторяющиеся строки в идентификаторе столбца, кроме первого вхождения.

enter image description here

Третий шаг - сортировка строк с учетом столбца ID.

df =df.sort_values('ID')

enter image description here

0 голосов
/ 01 июня 2018

Я считаю, что нужно:

df = pd.concat([df1, df2]).drop_duplicates(subset=['ID'], keep='last').sort_values('ID')
print (df)
    ID  A
0  ID1  5
1  ID2  1
2  ID3  8
3  ID4  8
3  ID5  7
4  ID6  8
5  ID7  9

Пояснение :

Первый concat оба DataFrame вместе:

print (pd.concat([df1, df2]))
    ID  A
0  ID1  5
1  ID2  6
2  ID3  7
3  ID4  8
0  ID1  5
1  ID2  1
2  ID3  8
3  ID5  7
4  ID6  8
5  ID7  9

Поскольку создаются все те же ID, удалите дубликаты с помощью drop_duplicates с сохранением только последнего значения:

print (pd.concat([df1, df2]).drop_duplicates(subset=['ID'], keep='last'))
    ID  A
3  ID4  8
0  ID1  5
1  ID2  1
2  ID3  8
3  ID5  7
4  ID6  8
5  ID7  9

И последней сортируйте по ID по sort_values.

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