Pandas系列|第七期:按多列分组排序并删除每组中排序不在第一位的

背景:物料清单(BOM)进行数据清洗时,在BOM表中按照父编码进行分组,保留QTY最大且失效时间最晚的一行,删除其余的行。

关键点:按照多列排序、分组、删除每分分组中排序不在第一位的。涉及函数 

df.sort_values((by=['col1', 'col2', 'col3'],
                                           ascending=[True, False, False])) #按照多列排序

df_sorted.groupby(['col']).head(1) # 分组

df_sorted.index.isin(reserved_indices) # 根据索引筛选行

解决办法:

import pandas as pd

# 创建一个示例DataFrame
data = {'PITEM': ['A0001', 'B0001', 'C0001', 'B0001', 'D0001','D0001'],
        'TYPE': ['BUY', 'BUY', 'BUY', 'BUY', 'MAKE', 'MAKE'],
        'QTY': [1, 0.4, 1, 0.6, 0.2, 0.8],
        'DISABLE_PERIOD': [5, 4, 6, 5, 7, 8],
        }
df = pd.DataFrame(data)

# 按照多列排序
df_sorted = df.sort_values(by=['PITEM', 'QTY', 'DISABLE_PERIOD'],
                                           ascending=[True, False, False])
# 分组,并得到每个分组中排序最大的索引
reserved_indices = df_sorte
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值