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

Pandas筛选最近一周无访客地点时遇轴重索引错误求助

解决方法

首先,你的代码逻辑和报错问题可以从以下几点修正:

1. 修正筛选逻辑

你的需求是找2023/3/17这周没有访客的地点,但当前代码筛选的是visits != 0(有访客的记录),完全和需求相反,需要调整为匹配无访客的条件。

2. 解决重复轴报错

ValueError: cannot reindex from a duplicate axis通常是因为原始数据集的索引存在重复值,或是groupby操作触发了重复索引冲突,可按以下步骤处理:

步骤一:先提取目标周数据

先筛选出2023/3/17这一周的所有记录,建议先统一日期格式避免匹配问题:

import pandas as pd

# 转换日期列格式为datetime
df['end_date'] = pd.to_datetime(df['end_date'], format="%m/%d/%Y")
# 提取目标周数据
df_target_week = df[df['end_date'] == pd.to_datetime("2023-03-17")].copy()

步骤二:按数据情况筛选无访客地点

情况1:地点在该周有记录但访客量为0

直接筛选访客量为0的记录,再去重得到唯一地点:

# 筛选该周访客量为0的记录
df_no_visits = df_target_week[df_target_week['visits'] == 0]
# 去重,保留唯一地点
df_no_visits_unique = df_no_visits.drop_duplicates(subset=['id', 'name', 'lat', 'lng'])

情况2:地点在该周无任何记录(视为无访客)

如果部分地点在目标周没有数据,需要对比全量地点列表:

# 获取所有唯一地点
all_locations = df.drop_duplicates(subset=['id', 'name', 'lat', 'lng'])
# 获取目标周有数据的地点
visited_locations = df_target_week.drop_duplicates(subset=['id', 'name', 'lat', 'lng'])
# 找出目标周无记录的地点
df_no_visits = all_locations[~all_locations['id'].isin(visited_locations['id'])]

步骤三:修正groupby用法(若需分组统计)

如果一定要用groupby,先重置索引避免重复轴问题,同时用sum()统计访客总量(而非count()统计记录数):

# 重置索引,消除重复索引
df = df.reset_index(drop=True)

df_target_week = df[df['end_date'] == pd.to_datetime("2023-03-17")]
# 按地点分组,统计该周访客总量
df_group = df_target_week.groupby(['id','name','lat', 'lng'])['visits'].sum().reset_index()
# 筛选总量为0的地点
df_no_visits = df_group[df_group['visits'] == 0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:02:08