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

Pandas带条件分组聚合(group by)及非数值字段规则取值实现方法

Pandas按指定规则分组聚合实现方案

我们可以通过自定义聚合函数配合groupby.agg实现需求,具体代码如下:

  1. 预处理空值,将数据中的空字符串统一转换为Pandas空值,避免空值被计入频率统计
import pandas as pd
# 原始数据
df = pd.DataFrame({'ISIN':['US02079K3059', 'US02079K3059', 'US02079K3059', 'US02079K3059', 'US02079K3059', 'US02079K3059', 'US02079K3059', 'US02079K3059', 'US00206R1023'],
               'Name':['ALPHABET INC.CL.A DL-,001', 'Alphabet Inc Class A', 'ALPHABET INC CLASS A', 'ALPHABET A', 'ALPHABET INC CLASS A', 'ALPHABET A', 'Alphabet Inc. Class C', 'Alphabet Inc. Class A', 'AT&T Inc'], 
               'Country':['United States', 'United States', 'United States', '', 'United States', 'United States', 'United States', 'United States', 'United States'],
               'Category':[ '', 'big', 'big', '', 'big', 'test', 'test', 'test', 'average'],
               'Category2':['important', '', 'important', '', '', '', '', '', 'irrelevant'],
               'Value':[1000, 750, 60, 50, 160, 9, 10, 10, 1]})
# 替换空字符串为Pandas空值
df = df.replace('', pd.NA)
  1. 自定义非数值字段的聚合函数,满足取排除空值后最高频、同频率取最先出现值的规则
def get_valid_top(s):
    # 过滤空值
    valid_series = s.dropna()
    if valid_series.empty:
        return pd.NA
    # 取众数,多个众数时返回第一个出现的值
    return valid_series.mode().iloc[0]
  1. 分组聚合,对Value字段求和,其余字段用自定义函数聚合
result = df.groupby('ISIN', as_index=False).agg(
    Name = ('Name', get_valid_top),
    Country = ('Country', get_valid_top),
    Category = ('Category', get_valid_top),
    Category2 = ('Category2', get_valid_top),
    Value = ('Value', 'sum')
)

运行后得到的result即可匹配你期望的输出结果。

内容的提问来源于stack exchange,提问作者Economist Learning Python

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:21:01