将两个熊猫数据帧与ID值配对

时间:2019-04-24 02:02:43

标签: python pandas numpy data-analysis

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

我不知道如何解决这么大的合并。我也害怕犯错误,因为几乎不可能抓住错误,因为数据没有其他识别因素。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这应该有效

glims = glims.merge(coordinates, how='left', left_on='GLAC_ID', right_on='glacier_id')