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

按Code分组实现列数值条件替换的技术求助

数据分组处理方案

需求说明

原始数据

ID           Value1       Value2        Code
   0001            3.3          432          A              
   0001             0           654          A              
   0001             0           63           A                
   0002             0           78           B               
   0002             1           98           B    
   0003             0           22           C    
   0003             0           65           C    
   0003             0           91           C    

目标结果

ID           Value1       Value2        Code
   0001            3.3          432          A              
   0001             0            0           A              
   0001             0            0           A                
   0002             0            0           B               
   0002             1           98           B    
   0003             0           22           C    
   0003             0           65           C    
   0003             0           91           C    

处理规则

  • 按Code字段分组
  • 若组内存在至少一行Value1≠0:将该组内所有Value1=0的行的Value2设为0
  • 若组内所有行Value1均为0:保持原数据不变

实现方案

Python Pandas 方法

import pandas as pd

# 构造原始数据(实际场景可通过read_csv等方法读取)
df = pd.DataFrame({
    'ID': ['0001', '0001', '0001', '0002', '0002', '0003', '0003', '0003'],
    'Value1': [3.3, 0, 0, 0, 1, 0, 0, 0],
    'Value2': [432, 654, 63, 78, 98, 22, 65, 91],
    'Code': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C']
})

# 标记每组是否存在非0的Value1
df['has_non_zero'] = df.groupby('Code')['Value1'].transform(lambda x: (x != 0).any())

# 应用规则修改Value2
df['Value2'] = df.apply(
    lambda row: 0 if row['has_non_zero'] and row['Value1'] == 0 else row['Value2'],
    axis=1
)

# 移除辅助列
df = df.drop(columns='has_non_zero')

# 输出结果
print(df)

SQL 方法(以MySQL为例)

-- 先标记每组是否存在非0的Value1
WITH group_status AS (
    SELECT 
        Code,
        MAX(CASE WHEN Value1 != 0 THEN 1 ELSE 0 END) AS has_non_zero
    FROM your_table
    GROUP BY Code
)

-- 更新符合条件的行
UPDATE your_table t
JOIN group_status gs ON t.Code = gs.Code
SET t.Value2 = 0
WHERE gs.has_non_zero = 1 AND t.Value1 = 0;

-- 查询处理后的数据
SELECT * FROM your_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:15:59