Pandas DataFrame特殊分组:按number列分组后布尔列执行OR聚合
实现代码
你可以直接按分组指定不同聚合规则实现需求,示例代码如下:
import pandas as pd import numpy as np # 1. 预处理:将数据中的空白字符串转为NaN,避免聚合时取到空值 df = df.replace(r'^\s*$', np.nan, regex=True) # 2. 定义各列聚合规则 agg_func = { # 同number下取值一致,取第一个非空值即可 "Num_1": "first", "Num_2": "first", "Num_3": "first", # 布尔列执行OR运算,用any()实现:分组内只要有一个1就返回1 "col_1": "any", "col_2": "any", "col_3": "any", # 取分组内唯一的非空时间值 "col_4": "first" } # 3. 按number字段分组聚合 res_df = df.groupby("number", as_index=False).agg(agg_func) # (可选)如果需要匹配示例输出中False显示为空白的格式,增加如下转换 res_df[["col_1", "col_2", "col_3"]] = res_df[["col_1", "col_2", "col_3"]].replace({True: 1, False: ""})
规则说明
- 相同
number对应的Num_1/Num_2/Num_3取值固定,直接取分组内第一个值即可保证正确性 - 布尔OR运算在Pandas中可以直接用
any()聚合函数实现,只要分组内存在任意一个1就返回True,全为0才返回False - 同分组下
col_4只有一行有有效值,用first()可以直接取到对应时间值
内容的提问来源于stack exchange,提问作者harp1814
相关产品推荐
相关产品推荐

