Pandas按条件统计Series唯一值:统计仅在x类别预订的唯一车辆数
实现方案
核心逻辑用pandas原生向量化运算实现,全程无Python层循环,处理百万级以上数据也能保证性能:
- 先提取所有不在
x分类下出现过的车牌集合 - 在
x分类的车牌中过滤掉上述集合,剩下的就是仅在x分类下有预订记录的车牌,统计唯一值数量即可
示例代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'booking_id': range(1, 11), 'booking_category': ['x','x','y','y','z','z','z','z','x','x'], 'vehicle_number': ['abc','def','abc','ghi','ghi','ghi','abc','abc','def','ghi'] }) # 核心运算逻辑 # 提取所有非x分类下的车牌 non_x_vehicles = df.loc[df['booking_category'] != 'x', 'vehicle_number'].unique() # 筛选仅在x分类下出现的车牌并统计唯一值 result = df.loc[ (df['booking_category'] == 'x') & (~df['vehicle_number'].isin(non_x_vehicles)), 'vehicle_number' ].nunique() print(result) # 输出结果:1
可选分组实现(适合小数据量)
如果更看重逻辑直观性,数据量不大的场景也可以用分组聚合实现:
# 按车牌分组,判断对应分类是否仅包含x only_x_mask = df.groupby('vehicle_number')['booking_category'].agg( lambda cate: set(cate) == {'x'} ) result = only_x_mask.sum()
内容的提问来源于stack exchange,提问作者Soumyajit
相关产品推荐
相关产品推荐

