groupby后对数据的聚合处理方法汇总

1、常规使用agg

优势:简单便捷

agg({'B':'count','C':'sum'})B列计数,C列求和,列名称分别为BC

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({'A': ['a', 'b', 'a', 'b', 'a'],
                   'B': [1, 2, 2, 3, 1],
                   'C': [1, 2, 2, 1, 2]})

# 对A列进行分组,并在C列为2的情况下同时对B列进行去重计数和计数
result = df.groupby('A').agg({'B':'count','C':'sum'}).reset_index()

# 打印结果
print(result)

2、使用传参型agg

优势:可以对同一列进行不同计算,同时可以对计算到的列命名

.agg(去重计数=('B', 'nunique'),count_B=('B', 'count'))B列计算去重计数和直接计数,分别命名为 去重计数count_B

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({'A': ['a', 'b', 'a', 'b', 'a'],
                   'B': [1, 2, 2, 3, 1],
                   'C': [1, 2, 2, 1, 2]})

# 对A列进行分组,并在C列为2的情况下同时对B列进行去重计数和计数
result = df[df['C'] == 2].groupby('A').agg(count_distinct_B=('B', 'nunique'),
                                           count_B=('B', 'size')).reset_index()

# 打印结果
print(result)

3、使用传参型agg+匿名函数

优势:可以对同一列进行不同计算,同时可以对计算到的列命名,可以对分组后的数据筛选后处理

agg(B列名称=('B', lambda x: x[df['C'] == 2].nunique()),count_B=('B', lambda x: x[df['C'] == 2].count()))

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({'A': ['a', 'b', 'a', 'b', 'a'],
                   'B': [1, 2, 2, 3, 1],
                   'C': [1, 2, 2, 1, 2]})

# 对A列进行分组,并在C列为2的情况下同时对B列进行去重计数和计数
result = df.groupby('A').agg(B列名称=('B', lambda x: x[df['C'] == 2].nunique()),
                             count_B=('B', lambda x: x[df['C'] == 2].count())).reset_index()

# 打印结果
print(result)

4、使用apply+匿名函数

优势:可以对同一列进行不同计算,同时可以对计算到的列命名,可以对分组后的数据筛选后处理

apply(lambda x: pd.Series({ 'count_distinct_B': x[x['C'] == 2]['B'].nunique(), 'count_B': x[x['C'] == 2]['B'].count() }))

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({'A': ['a', 'b', 'a', 'b', 'a'],
                   'B': [1, 2, 2, 3, 1],
                   'C': [1, 2, 2, 1, 2]})

# 对A列进行分组,并在C列为2的情况下同时对B列进行去重计数和计数
result = df.groupby('A').apply(lambda x: pd.Series({
    'count_distinct_B': x[x['C'] == 2]['B'].nunique(),
    'count_B': x[x['C'] == 2]['B'].count()
})).reset_index()

# 打印结果
print(result)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值