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

如何查看DataFrame中lat或long相同的title条目并实现可视化?

实现思路与可视化方案

数据预处理

首先得把lat和long从字符类型转成数值型,不然没法做坐标相关的计算和可视化:

import pandas as pd
# 转换类型,异常值转成NaN
sure['lat'] = pd.to_numeric(sure['lat'], errors='coerce')
sure['long'] = pd.to_numeric(sure['long'], errors='coerce')
# 移除转换后出现的空值行(按需调整)
sure = sure.dropna(subset=['lat', 'long'])

标记重复坐标组

给重复的lat或long分组,方便后续可视化区分:

# 给每个重复lat分配组ID
sure['lat_group'] = sure.groupby('lat').ngroup()
# 给每个重复long分配组ID
sure['long_group'] = sure.groupby('long').ngroup()

# 生成综合标记:标注是共享纬度、共享经度还是唯一坐标
sure['shared_type'] = sure.apply(
    lambda x: f"共享纬度组{x['lat_group']}" if sure['lat'].eq(x['lat']).sum()>1 
    else f"共享经度组{x['long_group']}" if sure['long'].eq(x['long']).sum()>1 
    else '唯一坐标',
    axis=1
)

可视化方案

方案1:散点图(直观展示坐标分布与重复条目)

用散点图展示所有坐标点,不同颜色区分重复组,同时标注title,一眼就能看到哪些条目共享坐标:

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 8))
# 按分组绘图
for group, data in sure.groupby('shared_type'):
    plt.scatter(data['long'], data['lat'], label=group, alpha=0.7)
    # 只给重复组加标注,避免唯一点的标注杂乱
    if group != '唯一坐标':
        for idx, row in data.iterrows():
            plt.annotate(row['title'], (row['long'], row['lat']), fontsize=9, xytext=(3,3), textcoords='offset points')

plt.xlabel('经度')
plt.ylabel('纬度')
plt.title('共享纬度/经度的Title条目分布')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.grid(True)
plt.tight_layout()
plt.show()

方案2:分组条形图(聚焦重复条目细节)

如果更关注哪些title共享同一个坐标值,用条形图配合文本输出,能清晰看到分组关系:

# 筛选出重复纬度的条目
lat_dup = sure[sure.duplicated('lat', keep=False)].sort_values('lat')
# 筛选出重复经度的条目
long_dup = sure[sure.duplicated('long', keep=False)].sort_values('long')

# 绘制共享纬度的条形图
plt.figure(figsize=(10, 6))
plt.barh(lat_dup['title'], lat_dup['lat'], color='skyblue')
plt.xlabel('纬度')
plt.title('共享同一纬度的Title条目')
plt.tight_layout()
plt.show()

# 绘制共享经度的条形图
plt.figure(figsize=(10, 6))
plt.barh(long_dup['title'], long_dup['long'], color='salmon')
plt.xlabel('经度')
plt.title('共享同一经度的Title条目')
plt.tight_layout()
plt.show()

# 打印具体分组信息
print("=== 共享同一纬度的条目 ===")
for lat, group in lat_dup.groupby('lat'):
    print(f"纬度 {lat}: {', '.join(group['title'].tolist())}")

print("\n=== 共享同一经度的条目 ===")
for long, group in long_dup.groupby('long'):
    print(f"经度 {long}: {', '.join(group['title'].tolist())}")

注意事项

  • 数据量较大时,散点图标注会拥挤,建议只展示重复组,或者用Plotly等交互式工具实现缩放查看。
  • 转换数值类型时,异常字符会被转为NaN,需根据业务需求决定是否保留或处理这些行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:52:39