python - 将两个 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'
我不知道如何处理这么大的合并。我也害怕犯错误,因为几乎不可能抓住它们,因为数据不包含其他识别因素。
任何指导都会很棒,谢谢。
解决方案
这是一个经典的合并问题。一种解决方法是使用直接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')
推荐阅读
- math - 缩放旋转椭圆的 X 轴
- visual-studio - 无法使用 Visual Studio Live Share 在客户端启动项目窗口
- python-2.7 - pip install mock 有效,但 import mock 无效
- javascript - 如何通过 esri js 中的 javascript api 访问安全的 webscene(无需向用户询问凭据。)
- python - 当我在 python tkinter 中另存为 pdf 时,它显示错误
- docker - 在构建 VSCode 开发容器时使用主机网络
- powershell - 混合纠缠发现和运行变量
- asp.net-core - 为什么我的 URL 在我按 Enter 之前得到处理?
- mysql - 使用子查询优化 SQL 查询
- php - 无法安装学说/mongodb-odm-bundle