[英]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_Number
和Lat/Long
不存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.