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

如何用Pandas去重访客并绘制访客国家占比饼图(Matplotlib)

解决方案

1. 正确获取唯一访客数据(保留Country列)

你的核心问题是分组时丢失了Country列,同时同一个VisitorID仅需统计一次,这里有两种简洁的处理方式:

方式一:直接去重(推荐)

因为同一个VisitorID对应的Country是唯一的,直接按VisitorID去重即可保留所有列:

# 保留每个VisitorID的第一条记录,自动保留Country列
unique_visitors = df.drop_duplicates(subset='VisitorID', keep='first')

方式二:分组时指定Country的聚合逻辑

如果必须用groupby,需要明确对Country进行聚合(比如取第一个值,同一ID的Country无差异):

unique_visitors = df.groupby('VisitorID').agg({
    'Country': 'first',  # 保留Country列
    'visitNumber': 'max'  # 可选,按需保留该访客的最大访问次数
}).reset_index()

2. 修复shape调用报错

shape是DataFrame的属性而非方法,不能加括号调用,正确写法:

# 查看数据维度,无需加()
print(unique_visitors.shape)

3. 绘制访客占比饼图

基于去重后的唯一访客数据,统计各国访客数量并绘制饼图:

import matplotlib.pyplot as plt

# 统计每个国家的唯一访客数
country_visitor_counts = unique_visitors['Country'].value_counts()

# 生成饼图
plt.figure(figsize=(6, 6))
plt.pie(
    country_visitor_counts.values,
    labels=country_visitor_counts.index,
    autopct='%1.1f%%',  # 显示百分比
    startangle=90
)
plt.title('各国唯一访客占比')
plt.axis('equal')  # 保证饼图为正圆形
plt.show()

注:根据你的原始数据,去重后共有4个唯一访客(USA、UK、CANADA、MEXICO各1人),因此各国占比为25%;若你预期33%,请检查原始数据是否存在合并国家等特殊逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:35:50