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

Pandas中多数据类型列求和:分组聚合处理非数值数据

Pandas实现方案:按指定字段分组并求和有效数值

需求说明

现有原始数据集:

Name   Location code  ID  Details  Column5        Code
Kirsh  HD12           76  Age:25   127.3          Yes
Kirsh  HD12           76  Age:25   12758.56       Yes
Kirsh  HD12           76  Age:25   No data found  No
John   HD12           87  Age:25;  76.45          Yes
John   HD12           87  Age:25;  No data found  No
John   HD12           87  Age:25;                 No
John   HD12           87  Age:25;  16578.56       Yes
Ward   HD12           87  Age:25;                 No
Ward   HD12           87  Age:25;                 No

需按Name、Location code、ID、Details字段分组,对Column5中的有效数值求和(忽略非数值内容、缺失值),最终得到目标结果:

Name   Location code  ID  Details  Column5    Code
Kirsh  HD12           76  Age:25   12885.86   Yes
John   HD12           87  Age:25;  16655.01   No
Ward   HD12           87  Age:25;             No

注:目标中Kirsh的Column5数值应为127.3+12758.56=12885.86,推测原始需求存在笔误,以下代码按正确求和逻辑实现

实现代码

import pandas as pd

# 构造原始数据集
raw_data = {
    'Name': ['Kirsh', 'Kirsh', 'Kirsh', 'John', 'John', 'John', 'John', 'Ward', 'Ward'],
    'Location code': ['HD12'] * 9,
    'ID': [76, 76, 76, 87, 87, 87, 87, 87, 87],
    'Details': ['Age:25']*3 + ['Age:25;']*6,
    'Column5': ['127.3', '12758.56', 'No data found', '76.45', 'No data found', '', '16578.56', '', ''],
    'Code': ['Yes', 'Yes', 'No', 'Yes', 'No', 'No', 'Yes', 'No', 'No']
}
df = pd.DataFrame(raw_data)

# 清洗Column5:将非数值内容转为NaN,求和时自动忽略
df['Column5'] = pd.to_numeric(df['Column5'], errors='coerce')

# 定义分组聚合逻辑
def process_group(group):
    # 计算有效数值求和
    col5_sum = group['Column5'].sum()
    # 处理Code字段:匹配目标规则,求和非空且存在Yes则取Yes,否则取No
    code_val = 'Yes' if (not pd.isna(col5_sum)) and ('Yes' in group['Code'].values) else 'No'
    # 格式化求和结果,空值转为空字符串
    formatted_sum = round(col5_sum, 2) if not pd.isna(col5_sum) else ''
    return pd.Series({'Column5': formatted_sum, 'Code': code_val})

# 执行分组聚合
result_df = df.groupby(['Name', 'Location code', 'ID', 'Details'], as_index=False).apply(process_group)

# 输出结果
print(result_df.to_string(index=False))

关键逻辑说明

  1. 数值清洗:用pd.to_numeric将Column5中的非数值内容转为NaN,Pandas求和时会自动忽略NaN值
  2. 分组聚合:按指定字段分组后,自定义聚合函数处理求和与Code字段的取值逻辑
  3. 结果格式化:将求和结果保留两位小数,无有效数值时显示为空字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:25:24