首页 > 解决方案 > 将两个 Pandas 数据帧与一个 ID 值配对

问题描述

我正在尝试整理一组关于冰川的可用数据。我们的原始数据来自 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 |

问题是,坐标数据框对于每个具有纬度经度的冰川 ID 都有一行,而我的Glims数据框对于每个冰川 ID 有多行,每个条目的数据都不同。

我需要根据两个数据帧之间匹配的 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'

我不知道如何处理这么大的合并。我也害怕犯错误,因为几乎不可能抓住它们,因为数据不包含其他识别因素。

任何指导都会很棒,谢谢。

标签: pythonpandasnumpydata-analysis

解决方案


这是一个经典的合并问题。一种解决方法是使用直接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')

推荐阅读