You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按分组和列值对Pandas DataFrame行进行条件合并

Pandas分组后按规则合并列值

给定如下Pandas DataFrame,需按GROUP分组后,对每列执行规则:若组内存在1或0则保留该值(1和0优先级相同,若同时存在两种值,优先取1),否则保留-1。

原始数据

import pandas as pd

df = pd.DataFrame({'GROUP':['A1', 'A1', 'B2', 'B2', 'B2', 'C3', 'C3'], 
                   'X':[1, -1, -1, 1, -1, -1, 1], 
                   'Y': [-1, 0, 1, -1, -1, -1, -1], 
                   'Z': [-1, -1, -1, -1, 0, 1, -1]})

原始DataFrame展示:

GROUP  X  Y  Z
0    A1  1 -1 -1
1    A1 -1  0 -1
2    B2 -1  1 -1
3    B2  1 -1 -1
4    B2 -1 -1  0
5    C3 -1 -1  1
6    C3  1 -1 -1

方法一:缺失值替换+最大值聚合

通过将-1替换为缺失值,利用最大值聚合的特性(1>0>缺失值)快速实现规则,逻辑简洁高效:

# 替换-1为缺失值,分组取最大值,恢复-1并转换数值类型
result = df.replace(-1, pd.NA).groupby('GROUP').agg('max').reset_index().fillna(-1)
result[['X', 'Y', 'Z']] = result[['X', 'Y', 'Z']].astype(int)

print(result)

输出结果:

GROUP  X  Y  Z
0    A1  1  0 -1
1    B2  1  1  0
2    C3  1 -1  1

方法二:自定义聚合函数

如果需要更直观的逻辑控制,可以自定义函数逐个检查组内值:

def get_target_value(col):
    if 1 in col.values:
        return 1
    elif 0 in col.values:
        return 0
    else:
        return -1

# 分组应用自定义函数
result = df.groupby('GROUP').agg(get_target_value).reset_index()

print(result)

输出结果与方法一完全一致。


内容的提问来源于stack exchange,提问作者Zara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:05:17