【问题标题】:Pairing two Pandas data frames with an ID value将两个 Pandas 数据帧与一个 ID 值配对
【发布时间】:2019-04-24 02:02:43
【问题描述】:

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

问题是,coordinates 数据框对于每个具有纬度经度的冰川 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'

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

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

【问题讨论】:

  • 你能给我们看看 glims.info

标签: python pandas numpy data-analysis


【解决方案1】:

这应该可以工作

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 2021-06-23
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多