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

使用Pandas过滤DataFrame重复记录并执行统计运算的高效方法

高效处理Pandas重复分组统计需求

针对已筛选出col1-col4存在重复记录的dup_df,可以通过Pandas的分组聚合或transform方法实现无循环的统计需求,步骤如下:

方法一:分组聚合+合并

  1. 按col1-col4分组,统计各Sex类别数量及总条数:
stats_df = dup_df.groupby(['col1', 'col2', 'col3', 'col4']).agg(
    Total_Male=('Sex', lambda x: (x == 'Male').sum()),
    Total_Female=('Sex', lambda x: (x == 'Female').sum()),
    Null_column=('Sex', lambda x: x.isna().sum()),
    Total=('Sex', 'count')
).reset_index()
  1. 提取每组的首行原始数据:
first_rows = dup_df.groupby(['col1', 'col2', 'col3', 'col4']).first().reset_index()
  1. 将首行数据与统计结果合并:
result = first_rows.merge(stats_df, on=['col1', 'col2', 'col3', 'col4'], how='left')

方法二:transform直接生成统计列(更简洁)

利用transform方法直接在原DataFrame中添加统计列,再去重保留每组首行:

# 生成各类统计列
dup_df['Total'] = dup_df.groupby(['col1', 'col2', 'col3', 'col4'])['Sex'].transform('count')
dup_df['Total_Male'] = dup_df.groupby(['col1', 'col2', 'col3', 'col4'])['Sex'].transform(lambda x: (x == 'Male').sum())
dup_df['Total_Female'] = dup_df.groupby(['col1', 'col2', 'col3', 'col4'])['Sex'].transform(lambda x: (x == 'Female').sum())
dup_df['Null_column'] = dup_df.groupby(['col1', 'col2', 'col3', 'col4'])['Sex'].transform(lambda x: x.isna().sum())

# 保留每组首行,去除重复组
result = dup_df.drop_duplicates(subset=['col1', 'col2', 'col3', 'col4'], keep='first')

两种方法均避免了循环操作,利用Pandas内置的向量化处理逻辑保证效率,最终结果会保留每组的首行原始数据,并填充对应的统计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:54:22