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

如何在Pandas DataFrame中按姓氏条件清空指定Location单元格?

处理DataFrame重复姓氏的Location列保留需求

问题场景

针对DataFrame中的姓氏列,需实现:每个姓氏的前两个重复项,将其对应Location列内容设为NaN(不得删除整行),仅保留第三个及以后的Location值(示例姓氏如Balchuinas、London、Fleck均需遵循此规则)。此前使用drop_duplicates(keep='last')会直接删除整行,不符合需求。

解决方案

利用groupby+cumcount给每个姓氏组内的行编号,再通过布尔索引精准修改Location列的值,代码如下:

import pandas as pd

# 假设DataFrame名为df,姓氏列是'Last Name',Location列是'Location'
# 1. 给每个姓氏组内的行分配从1开始的序号
df['_temp_rank'] = df.groupby('Last Name').cumcount() + 1

# 2. 将组内序号为1、2的行的Location设为NaN
df.loc[df['_temp_rank'].isin([1, 2]), 'Location'] = pd.NA

# 3. 删除临时序号列,保持数据结构整洁
df = df.drop('_temp_rank', axis=1)

代码说明

  • groupby('Last Name').cumcount()会给每个姓氏组内的行从0开始计数,加1后转为从1开始的序号,方便定位前两项。
  • 布尔索引df['_temp_rank'].isin([1, 2])精准匹配每个姓氏的前两行,直接修改Location列值为NaN,全程保留整行数据。
  • 若你的姓氏列或Location列名称不同,替换代码中对应列名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:55:19