Pandas分组统计:含资产A的订单单独/组合情况计数需求
Pandas解决方案:统计特定资产关联的订单数量
数据准备
先将示例数据导入Pandas DataFrame:
import pandas as pd data = { 'order_id': [1,1,1,2,2,3,4,4], 'asset_id': ['A','B','C','A','C','A','B','C'] } df = pd.DataFrame(data)
方法一:分组聚合统计
- 按
order_id分组,提取每个订单的关键特征:
order_info = df.groupby('order_id').agg( has_A=('asset_id', lambda x: 'A' in x.values), asset_count=('asset_id', 'nunique') ).reset_index()
- 统计仅包含资产A的订单数量:
only_A_count = len(order_info[(order_info['has_A']) & (order_info['asset_count'] == 1)]) print(f"仅包含资产A的订单数量:{only_A_count}") # 输出1
- 统计包含A且同时包含其他资产的订单数量:
A_with_others_count = len(order_info[(order_info['has_A']) & (order_info['asset_count'] > 1)]) print(f"包含资产A且同时包含其他资产的订单数量:{A_with_others_count}") # 输出2
方法二:高效布尔判断统计
无需生成额外集合,直接通过布尔条件完成统计,适合大数据量场景:
order_flags = df.groupby('order_id').agg( has_A=('asset_id', lambda x: (x == 'A').any()), has_other=('asset_id', lambda x: (x != 'A').any()) ).reset_index() only_A = len(order_flags[(order_flags['has_A']) & (~order_flags['has_other'])]) A_plus_others = len(order_flags[(order_flags['has_A']) & (order_flags['has_other'])]) print(f"仅包含资产A的订单数量:{only_A}") print(f"包含资产A且同时包含其他资产的订单数量:{A_plus_others}")
内容的提问来源于stack exchange,提问作者Léal
相关产品推荐
相关产品推荐

