沧州网站制作公司公司部门简称
Pandas提供了强大的分组聚合功能,可以轻松进行条件分组计算和统计。本文通过一个例子,展示如何使用Pandas的`.groupby()`和`.agg()`方法进行条件分组计算。
准备数据
 假设有这样一个字典数据:
dict = {
'姓名': ['张三','李四','王五','赵六'],
'1月':['100','150','200','300'],
'2月':['150','250','300','400'], 
'3月':['200','250','300','500'],
'4月':['150','300','200','400'],
'5月':['200','100','300','200'],
'6月':['200','100','300','200'],
'7月':['200','100','300','200'],
} 
 我们要根据这个数据计算得到这样一个结果:
    姓名  销售额大于200的月份数量  销售额大于300的月份数量
 0  张三            3.0                   1.0
 1  李四            3.0                   2.0 
 2  王五            4.0                   3.0   
 3  赵六            5.0                   4.0
分组和聚合
 可以这样实现:
df = pd.DataFrame(dict)# 分组bys姓名
grouped = df.groupby('姓名')  # 销售额大于200的月份数量
cnt1 = grouped['1月'].agg(lambda x: (x>200).sum())   # 销售额大于300的月份数量
cnt2 = grouped['1月'].agg(lambda x: (x>300).sum())# 合并两个Series,重命名列  
result = pd.concat([cnt1, cnt2], axis=1).rename(columns={0:'销售额大于200的月份数量',1:'销售额大于300的月份数量'})  print(result) 
1. 使用`df.groupby('姓名')`根据'姓名'列进行分组
 2. 使用`.agg()`和匿名函数`lambda x: (x>200).sum()`计算每组的销售额大于200的月份数量
 3. 同理计算销售额大于300的月份数量
 4. 使用`pd.concat()`将两个Series合并,并重命名列
 5. 最终得到所需的结果DataFrame
