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

使用Pandas按冒号前唯一字符分组求和的问题求助

解决按Box列首段字符串分组求和的问题

问题描述

需要按Box列中第一个冒号前的唯一字符分组,对FALSE和TRUE列求和。现有数据:

Box                 FALSE    TRUE
DDD8:0Y:1C611:100   1        2
DDD8:0Y:1C711:107   2        1
DDD8:0Y:1C711:109   3        5
AAS0:1T:1F500A:001  1        4
AAS0:1T:1F500A:002  2        2
AAS0:1T:1F500A:005  0        3
AAS0:1T:1F500A:005  2        3

期望输出(注:期望输出中的AA20应为笔误,实际应为AAS0):

Box     FALSE   TRUE
    DDD8    6       8
    AAS0    5       12

当前使用str.split(':')处理Box列后调用groupby('key').sum(),但输出标签未正确生成。

解决方案

问题出在未正确提取分组键或分组后未将索引转为列,以下是修正后的完整代码:

import pandas as pd

# 构造DataFrame(实际场景可替换为读取数据的代码,如pd.read_csv)
data = {
    'Box': ['DDD8:0Y:1C611:100', 'DDD8:0Y:1C711:107', 'DDD8:0Y:1C711:109',
            'AAS0:1T:1F500A:001', 'AAS0:1T:1F500A:002', 'AAS0:1T:1F500A:005', 'AAS0:1T:1F500A:005'],
    'FALSE': [1, 2, 3, 1, 2, 0, 2],
    'TRUE': [2, 1, 5, 4, 2, 3, 3]
}
df = pd.DataFrame(data)

# 提取Box列第一个冒号前的字符串作为分组键
# 方法1:split后取第一个元素
df['Group'] = df['Box'].str.split(':').str[0]
# 方法2:正则提取(处理大量数据时更高效)
# df['Group'] = df['Box'].str.extract(r'^([^:]+)', expand=False)

# 按分组键对FALSE、TRUE列求和,并重设索引将分组键转为列
result = df.groupby('Group')[['FALSE', 'TRUE']].sum().reset_index()

# 重命名列名以匹配期望输出格式
result = result.rename(columns={'Group': 'Box'})

# 打印结果
print(result.to_string(index=False))

关键修正点

  1. 正确提取分组键:必须通过str.split(':').str[0]或正则提取,确保拿到第一个冒号前的完整字符串,而不是整个split后的列表。
  2. 重置索引:groupby默认会将分组键设为索引,调用reset_index()可以将其转为普通列,保证输出有Box标签。
  3. 列名重命名:将临时分组列Group改回Box,匹配期望输出的列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:33:30