Pandas按FreightTypeID分组计算useAll字段的实现方法
需求说明
给定输入数据表,需按FreightTypeID维度分组,生成名为useAll的字段,取值规则为:若对应分组下Order列不存在空值则useAll为1,否则为0,最终返回每个FreightTypeID对应取值的结果表。
输入表预览
FreightID FreightTypeID Order 0 1 1 1.0 1 2 1 3.0 2 3 1 NaN 3 4 2 1.0 4 5 2 2.0 5 6 2 3.0 6 7 3 NaN 7 8 3 NaN 8 9 3 NaN
测试数据构造代码
import pandas as pd solution_dic = {"FreightID": [1,2,3,4,5,6,7,8,9], "FreightTypeID": [1,1,1,2,2,2,3,3,3], "Order": [1,3,None,1,2,3,None,None,None]} df=pd.DataFrame(solution_dic)
预期输出结果
FreightTypeID UseAll 0 1 0 1 2 1 2 3 0
实现方法
直接通过pandas分组聚合即可完成需求,核心代码如下:
# 按FreightTypeID分组计算UseAll result = df.groupby('FreightTypeID', as_index=False).agg( UseAll=('Order', lambda col: 1 if col.notna().all() else 0) )
代码逻辑说明:
- 调用
groupby按FreightTypeID字段分组,传入as_index=False保证分组字段保留为普通列,不会成为结果表的索引 - 聚合时针对
Order列做判断:col.notna().all()用来校验当前分组下Order列的所有值是否都非空,满足条件返回1,否则返回0,聚合结果列命名为UseAll - 运行后得到的
result和预期输出完全一致。
内容的提问来源于stack exchange,提问作者william007
相关产品推荐
相关产品推荐

