You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测DataFrame中嵌套数据结构内的GPS数据重复项

检测DataFrame事件列中GPS数据的重复值

我的DataFrame中events列存储着事件列表,需要检测这些事件里的GPS数据(latitude和longitude)是否存在重复,DataFrame结构如下:

deviceIdinsertTimeevents
12345671686261264478[{'deviceDetailsDataModel': {'deviceId': '1234567'}, 'eventDateTime': '1686261000937', 'gpsDataModel': {'latitude': '38.0436213', 'longitude': '-90.5173831'}}, {'deviceDetailsDataModel': {'deviceId': '1234567'}, 'eventDateTime': '1686261001954', 'gpsDataModel': {'latitude': '38.0436203', 'longitude': '-90.5172008'}}, ...(后续事件均含唯一GPS数据)]
4567891686261264478[{'deviceDetailsDataModel': {'deviceId': '456789'}, 'eventDateTime': '1686261000937', 'gpsDataModel': {'latitude': '38.0436213', 'longitude': '-90.5173831'}}, ...(其中第15、16个事件GPS数据完全相同,最后两个事件无GPS数据)]

实现方案

1. 展开事件列表并提取GPS数据

先把events列的列表拆分为单独行,提取每个事件的GPS经纬度,过滤掉不含GPS数据的事件:

import pandas as pd

# 假设你的DataFrame名为df
# 展开events列
exploded_df = df.explode('events', ignore_index=True)

# 提取GPS经纬度,无GPS数据的记为NaN
exploded_df['latitude'] = exploded_df['events'].apply(lambda x: x.get('gpsDataModel', {}).get('latitude'))
exploded_df['longitude'] = exploded_df['events'].apply(lambda x: x.get('gpsDataModel', {}).get('longitude'))

# 过滤掉无GPS数据的行
gps_df = exploded_df.dropna(subset=['latitude', 'longitude']).copy()

2. 检测重复GPS数据

可以针对两种场景检测重复:

场景1:单设备内的GPS重复

找出同一设备下重复出现的GPS组合:

device_duplicates = gps_df[gps_df.duplicated(subset=['deviceId', 'latitude', 'longitude'], keep=False)]

print("单设备内重复的GPS数据:")
print(device_duplicates[['deviceId', 'latitude', 'longitude', 'events']])

场景2:跨设备的GPS重复

找出全数据集中重复出现的GPS组合(不区分设备):

global_duplicates = gps_df[gps_df.duplicated(subset=['latitude', 'longitude'], keep=False)]

print("\n跨设备重复的GPS数据:")
print(global_duplicates[['deviceId', 'latitude', 'longitude', 'events']])

3. 统计重复次数(可选)

如果需要统计每个重复GPS的出现次数:

# 单设备内重复次数统计
device_dup_counts = gps_df.groupby(['deviceId', 'latitude', 'longitude']).size().reset_index(name='重复次数')
device_dup_counts = device_dup_counts[device_dup_counts['重复次数'] > 1]
print("\n单设备内GPS重复次数统计:")
print(device_dup_counts)

# 跨设备重复次数统计
global_dup_counts = gps_df.groupby(['latitude', 'longitude']).size().reset_index(name='重复次数')
global_dup_counts = global_dup_counts[global_dup_counts['重复次数'] > 1]
print("\n跨设备GPS重复次数统计:")
print(global_dup_counts)

内容的提问来源于stack exchange,提问作者sman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:42:03