pandas按指定列groupby统计分组总行数及POS值个数的方法
实现方案
你可以选择以下两种方式实现需求,推荐第一种一次性聚合的写法,效率更高:
方法1:分组时直接聚合两个指标
直接在groupby阶段同时统计每组总数据量和POS的数量,无需后续拼接操作:
dfB = dfA.groupby(["name", "field", "country"], dropna=False).agg( No_of_data=("action", "size"), No_of_POS=("action", lambda x: (x == "POS").sum()) ).reset_index()
方法2:单独统计POS数量后合并到已有的dfB
如果已经生成了dfB不想重新执行分组逻辑,可以先统计每组POS的数量,再左连接合并到dfB,无POS的组会自动补0:
# 统计每组POS数量 pos_count = dfA[dfA["action"] == "POS"].groupby(["name", "field", "country"], dropna=False).size().reset_index(name="No_of_POS") # 合并到dfB,缺失值补0并转换为整数类型 dfB = dfB.merge(pos_count, on=["name", "field", "country"], how="left").fillna({"No_of_POS": 0}) dfB["No_of_POS"] = dfB["No_of_POS"].astype(int)
最终得到的dfB结构如下:
| name | field | country | No_of_data | No_of_POS |
|---|---|---|---|---|
| Sam | elec | USA | 3 | 2 |
| Tommy | mech | Canada | 2 | 0 |
| Brian | IT | Spain | 3 | 1 |
内容的提问来源于stack exchange,提问作者Dawn.Sahil
相关产品推荐
相关产品推荐

