Pandas_groupby_aggregation

在Pandas中,groupby方法经常与agg方法结合使用,以对分组后的数据应用聚合函数。

我的写法

grouped = df.groupby('year')['value'].mean().reset_index()

reset_index 是为了把它转换成dataframe。中括号里的是要算聚合mean的一列。
这相当于SQL的:

SELECT year, AVG(value)
FROM df
GROUP BY year

还可以给聚合的列取名字

grouped = df.groupby('year').agg(
    avg_col = pd.NamedAgg(column="value", aggfunc="mean")).reset_index()

相当于SQL的:

SELECT year, AVG(value) AS avg_col
FROM df
GROUP BY year

groupby() 括号里可以写几个列:

grouped = df.groupby(['city', 'street']).agg(
    bank_count = pd.NamedAgg(column='bank_id', aggfunc='count'), 
    avg_score = pd.NamedAgg(column='score', aggfunc='mean')).reset_index()

其它讲解

基本语法

grouped = df.groupby('grouping_column')
result = grouped.agg(aggregation_functions)

• df:你的DataFrame对象。
• grouping_column:用于分组的列名。
• aggregation_functions:一个或多个聚合函数,可以是Pandas内置的函数,如sum、mean、count等,也可以是自定义的函数。
示例
假设你有一个名为df的DataFrame,包含员工的部门和工资信息,你想计算每个部门的平均工资:

import pandas as pd
data = {
    'department': ['A', 'B', 'A', 'B', 'C', 'A', 'B', 'C'],
    'salary': [50000, 60000, 52000, 61000, 55000, 51000, 62000, 56000]
}
df = pd.DataFrame(data)

# 使用groupby和agg计算每个部门的平均工资
result = df.groupby('department')['salary'].agg('mean')
print(result)

这将输出:
department
A 51400
B 60900
C 55500
Name: salary, dtype: int64

使用多个聚合函数
你可以在agg方法中传递一个函数列表,对每个分组应用多个聚合函数:

result = df.groupby('department')['salary'].agg(['mean', 'sum', 'count', 'max'])
print(result)

这将输出每个部门的工资的平均值、总和、计数和最大值。

使用自定义函数
你也可以在agg方法中使用自定义函数:

def custom_mean(x):
    return x.mean()

result = df.groupby('department')['salary'].agg(custom_mean)
print(result)

这将计算每个部门的平均工资,和直接使用内置的mean函数效果相同。
使用多个列和多个聚合函数

result = df.groupby('department').agg({
    'salary': ['mean', 'sum', 'max'],
    'other_column': ['min', 'count']
})
print(result)
#创建df
data = {"A": [1, 1, 2, 2],
"B": [1, 2, 3, 4],
"C": [0.362838, 0.227877, 1.267767, -0.562860]}
df = pd.DataFrame(data)

df
A B C
0 1 1 0.362838
1 1 2 0.227877
2 2 3 1.267767
3 2 4 -0.562860

只按B列聚合

df.groupby('A').B.agg(['min', 'max'])

输出
min max
A
1 1 2
2 3 4

多个列,多个聚合函数,并重命名

df.groupby("A").agg(
    b_min=pd.NamedAgg(column="B", aggfunc="min"),
    c_sum=pd.NamedAgg(column="C", aggfunc="sum")
)

输出
b_min c_sum
A
1 1 0.590715
2 3 0.704907

使用lambda函数

df.groupby("A")[["B"]].agg(lambda x: x.astype(float).min())
  B

A
1 1.0
2 3.0

df.groupby('A').agg({'B': ['min', 'max'], 'C': 'sum'})
B             C

min max sum
A
1 1 2 0.590715
2 3 4 0.704907

pandas agg 官网:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.aggregate.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值