如何对pandas DataFrame按两列中任意一列的类别进行分组计算
实现方法
核心逻辑是先给每条数据打上它所属的所有分组标签(只要study_name或request_name匹配就打上对应标签,自动去重避免重复计数),再展开后分组聚合即可,具体代码如下:
第一步:构造分组标签列
import pandas as pd # 给每行生成所有符合条件的非空分组标签,自动去重避免同一条数据重复计数 df["name"] = df.apply( lambda row: list(pd.unique([row.study_name, row.request_name])[pd.notna(pd.unique([row.study_name, row.request_name]))]), axis=1 )
第二步:展开标签列
# 把列表形式的标签炸开,每条数据对应所属的每一个分组 df_exploded = df.explode("name", ignore_index=True)
第三步:分组聚合
# 按要求分组计算计数和均值 result = df_exploded.groupby(["x_ray_system_name", "name"]).agg({"total_dlp": ["count", "mean"]})
运行后得到的result和预期输出完全一致:
total_dlp count mean x_ray_system_name name All systems blank 3 200.000000 head 4 187.500000
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

