本文目录导读:

我来给你一个完整的Pandas数据分组重排序案例,包含几种常见场景:
基础准备
import pandas as pd
import numpy as np
# 创建示例数据
data = {
'部门': ['技术部', '市场部', '技术部', '人事部', '市场部', '技术部', '人事部', '市场部'],
'姓名': ['张三', '李四', '王五', '赵六', '孙七', '周八', '吴九', '郑十'],
'工资': [15000, 12000, 18000, 10000, 13000, 16000, 11000, 14000],
'年龄': [28, 32, 25, 35, 29, 31, 27, 33]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
分组后排序的几种方法
方法1:对分组结果进行排序
# 按部门分组,然后对每个组内的工资排序
df_grouped = df.groupby('部门').apply(lambda x: x.sort_values('工资', ascending=False))
df_grouped = df_grouped.reset_index(drop=True)
print("各部门按工资降序:")
print(df_grouped)
方法2:使用sort_values配合分组
# 先按部门分组,再按工资排序
df_sorted = df.groupby('部门', group_keys=False).apply(lambda x: x.sort_values('工资'))
print("各部门按工资升序:")
print(df_sorted)
方法3:使用rank()排名
# 在各组内添加排名
df_copy = df.copy()
df_copy['工资排名'] = df_copy.groupby('部门')['工资'].rank(method='dense', ascending=False)
df_sorted_rank = df_copy.sort_values(['部门', '工资排名'])
print("带排名的分组排序:")
print(df_sorted_rank)
更复杂的排序场景
按多个条件分组排序
# 按部门分组,先按工资降序,再按年龄升序
df_multi_sort = df.groupby('部门', group_keys=False).apply(
lambda x: x.sort_values(['工资', '年龄'], ascending=[False, True])
)
print("多条件排序(工资降序+年龄升序):")
print(df_multi_sort)
统计分组后的排序
# 计算各部门的平均工资,然后排序
dept_stats = df.groupby('部门').agg({
'工资': ['mean', 'sum', 'count'],
'年龄': 'mean'
}).round(2)
dept_stats.columns = ['平均工资', '工资总额', '人数', '平均年龄']
dept_stats_sorted = dept_stats.sort_values('平均工资', ascending=False)
print("各部门统计(按平均工资降序):")
print(dept_stats_sorted)
实用案例:销售数据分析
# 模拟销售数据
sales_data = {
'销售员': ['张三', '张三', '李四', '李四', '王五', '王五', '张三'],
'月份': [1, 2, 1, 2, 1, 2, 3],
'销售额': [10000, 15000, 12000, 18000, 9000, 16000, 20000],
'产品': ['A', 'B', 'A', 'B', 'A', 'B', 'A']
}
sales_df = pd.DataFrame(sales_data)
print("销售数据:")
print(sales_df)
# 每个销售员按销售额排序
sales_sorted = sales_df.groupby('销售员', group_keys=False).apply(
lambda x: x.sort_values('销售额', ascending=False)
)
print("\n各销售员销售额排序(降序):")
print(sales_sorted)
# 找出各销售员最高销售额的月份
top_sales = sales_df.groupby('销售员').apply(
lambda x: x.loc[x['销售额'].idxmax()]
)
print("\n各销售员最佳月份:")
print(top_sales)
高级技巧:自定义排序规则
# 自定义排序顺序
custom_order = ['人事部', '市场部', '技术部']
df['部门排序'] = pd.Categorical(df['部门'], categories=custom_order, ordered=True)
# 按自定义顺序和工资排序
df_custom = df.sort_values(['部门排序', '工资'], ascending=[True, False])
print("自定义部门顺序排序:")
print(df_custom[['部门', '姓名', '工资']])
完整示例代码
import pandas as pd
def demo_group_sort():
"""
Pandas分组排序完整演示
"""
# 创建示例数据
data = {
'部门': ['技术部', '市场部', '技术部', '人事部', '市场部', '技术部', '人事部', '市场部'],
'姓名': ['张三', '李四', '王五', '赵六', '孙七', '周八', '吴九', '郑十'],
'工资': [15000, 12000, 18000, 10000, 13000, 16000, 11000, 14000],
'年龄': [28, 32, 25, 35, 29, 31, 27, 33]
}
df = pd.DataFrame(data)
# 方法1:分组内排序
result1 = df.groupby('部门').apply(lambda x: x.sort_values('工资', ascending=False))
result1 = result1.reset_index(drop=True)
# 方法2:分组后排名
df['组内排名'] = df.groupby('部门')['工资'].rank(method='dense', ascending=False)
result2 = df.sort_values(['部门', '组内排名'])
# 方法3:多条件排序
result3 = df.groupby('部门', group_keys=False).apply(
lambda x: x.sort_values(['工资', '年龄'], ascending=[False, True])
)
return result1, result2, result3
# 运行演示
result1, result2, result3 = demo_group_sort()
print("方法1 - 组内排序:")
print(result1)
print("\n方法2 - 组内排名:")
print(result2)
print("\n方法3 - 多条件排序:")
print(result3)
这些方法覆盖了Pandas数据分组重排序的主要场景,你可以根据实际需求选择合适的方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播