繁体   English   中英

使用组合键合并 pandas 中的数据框

[英]Merge dataframes in pandas with a combination of keys

我有两个数据框,我需要根据一个键(一个“事件编号”)将它们组合在一起。 然而,关键是重复的,因为它们将被摄取的数据库需要特定的坐标格式。 如何根据键的组合加入必要的列?

例如,这两个表如下所示:

事故编号 纬度/经度 GPS坐标
AB123 纬度 32.123
AB123 120.123
CD321 纬度 31.321
CD321 121.321

和...

事故编号 纬度/经度 地理代码坐标
AB123 纬度 35.123
AB123 125.123
CD321 纬度 36.321
CD321 126.321

我需要去...

事故编号 纬度/经度 GPS坐标 地理代码坐标
AB123 纬度 32.123 35.123
AB123 120.123 125.123
CD321 纬度 31.321 36.321
CD321 121.321 126.321

每个表中的记录数不是 100% 相等,因此需要允许 NaN。 我实际上是在尝试将“GeoCodeCoordinates”列添加到另一个 dataframe 中,结合“事件编号”和“纬度/经度”,因此它将值“AB123 + Lat”和“AB123 + Long”视为一个单一的钥匙。 这可以在代码中指定,还是需要创建一个新列和一个计算来创建该值作为键?

我想我是以一种有点愚蠢的方式来做这件事的。 Lat 和 Long 最初存储在单独的字段中,我使用 .melt() 使数据更长。 最终接受这个的数据库需要 Lat/Long 字段的更长格式。

GPSColList = list(GPSRecords.columns)

GPSColList.remove('Latitude')

GPSList.remove('Longitude')

GPSMelt = GPSRecords.melt(id_vars=GPSColList, value_vars=['Latitude', 'Longitude'], var_name='Lat/Long', value_name="GPSCoordinates")

由于两组坐标位于不同的字段中,我用每组坐标创建了两个数据框并分别熔化它们。 我尝试合并它们看起来像:

mergeMelt = pd.merge(GPSMelt, GeoCodeMelt[["GeoCodeCoordinates"]], on=['Incident_Number', 'Lat/Long'])

结果是 KeyError: 'Incident_Number'

尝试:

cols = ['Incident_Number', 'Lat/Long', 'GeoCodeCoordinates']
mergeMelt = GPSMelt.merge(GeoCodeMelt[cols], on=cols[:-1])

KeyError: 'Incident_Number'被引发是因为您使用GeoCodeMelt[['GeoCodeCoordinates']]所以当您合并时您的列Incident_NumberLat/Long不存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM