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

如何对DataFrame按ID去重并保留行结构与指定列值?

高效处理DataFrame重复ID行的列置空需求

针对你需要保留同一ID首行完整数据、其余行仅留ID和name列的需求,推荐用以下更高效的批量处理方法,比逐列用np.where更简洁:

实现代码

import pandas as pd

# 你的示例数据
df = pd.DataFrame({
    'id': [101, 101, 101],
    'column_a': ['abc', 'abc', 'abc'],
    'column_b': ['def', 'def', 'def'],
    'column_c': ['ghi', 'ghi', 'ghi'],
    'name': ['adam', 'brook', 'chris']
})

# 标记出每个ID的非首行重复记录
is_duplicate_row = df.duplicated('id', keep='first')

# 筛选出需要置空的列(排除id和name)
cols_to_clear = df.columns.difference(['id', 'name'])

# 对重复行的目标列批量置空
df.loc[is_duplicate_row, cols_to_clear] = ''

print(df)

方法说明

  1. df.duplicated('id', keep='first'):快速标记出每个ID的非首行记录,返回布尔数组,True表示该行为重复行(非首行)
  2. df.columns.difference(['id', 'name']):自动获取所有需要置空的列,不用手动列出来,扩展性更强
  3. 用df.loc批量赋值,一次处理所有目标列,比逐列调用np.where效率更高,尤其适合大数据集

运行后就能得到你想要的结果:

id column_a column_b column_c    name
0  101      abc      def      ghi    adam
1  101                                 brook
2  101                                 chris

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:45:59