Сопряжение двух кадров данных Pandas со значением идентификатора - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь собрать полезный набор данных о ледниках. Наши исходные данные взяты из набора данных ArcGIS, а значения широты / долготы были сохранены в отдельном файле, теперь отделенном от CSV со всеми нашими данными. Я пытаюсь объединить файлы широты и долготы с нашим набором данных. Вот предварительный просмотр того, как выглядят файлы.

Это мой основной файл набора данных, glims (столбцы опущены для ясности)

| ANLYS_ID | GLAC_ID        | AREA  |
|----------|----------------|-------|
| 101215   | G286929E46788S | 2.401 |
| 101146   | G286929E46788S | 1.318 |
| 101162   | G286929E46788S | 0.061 |

Это файл широты и долготы, координаты

| lat   |   long  |        glacier_id |
|-------|---------|----------------|
| 1.187 | -70.166 | G001187E70166S |
| 2.050 | -70.629 | G002050E70629S |
| 3.299 | -54.407 | G002939E70509S |

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

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

Вот что я пробовал до сих пор.

glims = pd.read_csv('glims_clean.csv')
coordinates = pd.read_csv('LatLong_GLIMS.csv')

df['que'] = np.where((coordinates['glacier_id'] == 
glims['GLAC_ID']))

возвращается ошибка: объект 'int' не может быть подписан

и:

glims.merge(coordinates, how='right', on=('glacier_id', 'GLAC_ID'))

возвращается ошибка: объект int не имеет атрибута 'merge'

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

Любое руководство было бы замечательно, спасибо.

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

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

glims = glims.merge(coordinates, how='left', left_on='GLAC_ID', right_on='glacier_id')
1 голос
/ 24 апреля 2019

Это классическая проблема слияния. Один из способов решить эту проблему - использовать прямое loc и сопоставление индекса

glims = glims.set_index('GLAC_ID')

glims.loc[:, 'lat']  = coord.set_index('glacier_id').lat
glims.loc[:, 'long'] = coord.set_index('glacier_id').long

glims = glims.reset_index()

Вы также можете использовать pd.merge

pd.merge(glims,
         coord.rename(columns={'glacier_id': 'GLAC_ID'}), 
         on='GLAC_ID')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...