如何对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)
方法说明
df.duplicated('id', keep='first'):快速标记出每个ID的非首行记录,返回布尔数组,True表示该行为重复行(非首行)df.columns.difference(['id', 'name']):自动获取所有需要置空的列,不用手动列出来,扩展性更强- 用
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
相关产品推荐
相关产品推荐

