[python]返回每个分组的top_n

def top_n(df, n=3, column='APM'):
    """
        返回每个分组按 column 的 top n 数据
    """
    return df.sort_values(by=column, ascending=False)[:n]

df_data.groupby('LeagueIndex').apply(top_n)

禁止分组 group_keys=False

df_data.groupby('LeagueIndex', group_keys=False).apply(top_n)
# apply函数接收的参数会传入自定义的函数中
df_data.groupby('LeagueIndex').apply(top_n, n=2, column='Age')
<think>我们使用pandas的DataFrame,分组操作通常使用groupby方法 分组后可以应用聚合函数(如sum, mean等)或进行其他操作 下面是一个示例代码,展示如何按照某个字段分组并计算每组的平均值 同时,我们也会展示分组后不聚合,而是转换成列表(保留原始数据)的方法</think>在Python的pandas库中,可以使用`groupby()`方法按照指定字段对DataFrame进行分组。以下是详细示例: ```python import pandas as pd # 创建示例DataFrame data = { 'Department': ['HR', 'IT', 'HR', 'Finance', 'IT', 'Finance'], 'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'], 'Salary': [50000, 70000, 55000, 60000, 75000, 65000] } df = pd.DataFrame(data) # 按照Department字段分组 grouped = df.groupby('Department') # 1. 查看分组结果 print("分组对象类型:", type(grouped)) # 2. 遍历分组 print("\n遍历分组结果:") for name, group in grouped: print(f"\n部门: {name}") print(group) # 3. 应用聚合函数 # 计算每个部门的平均薪资 avg_salary = grouped['Salary'].mean() print("\n各部门平均薪资:\n", avg_salary) # 4. 多字段分组 # 按部门和薪资级别分组 df['SalaryLevel'] = df['Salary'].apply(lambda x: 'High' if x > 60000 else 'Low') multi_grouped = df.groupby(['Department', 'SalaryLevel']) print("\n多级分组计数:\n", multi_grouped.size()) # 5. 分组后应用自定义函数 # 获每个部门薪资最高的员工 def top_earner(group): return group.loc[group['Salary'].idxmax()] print("\n各部门薪资最高员工:\n", grouped.apply(top_earner)) ``` ### 输出说明: ``` 分组对象类型: <class 'pandas.core.groupby.generic.DataFrameGroupBy'> 遍历分组结果: 部门: Finance Department Employee Salary SalaryLevel 3 Finance David 60000 Low 5 Finance Frank 65000 High 部门: HR Department Employee Salary SalaryLevel 0 HR Alice 50000 Low 2 HR Charlie 55000 Low 部门: IT Department Employee Salary SalaryLevel 1 IT Bob 70000 High 4 IT Eva 75000 High 各部门平均薪资: Department Finance 62500.0 HR 52500.0 IT 72500.0 Name: Salary, dtype: float64 多级分组计数: Department SalaryLevel Finance High 1 Low 1 HR Low 2 IT High 2 dtype: int64 各部门薪资最高员工: Department Employee Salary SalaryLevel Department Finance 5 Finance Frank 65000 High HR 2 HR Charlie 55000 Low IT 4 IT Eva 75000 High ``` ### 关键点: 1. `groupby()`返回的是GroupBy对象,不是常规DataFrame 2. 分组后可以应用聚合函数(`sum`, `mean`, `count`等) 3. 支持多列分组(传入列名列表) 4. 可以使用`apply()`应用自定义函数 5. 分组后可通过`get_group()`获特定分组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值