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

Pandas:字段组合去重并求和、移除含特定值行的实现问题

解决Pandas中的组合去重与求和需求

我来帮你搞定这个数据处理需求!你的核心目标是把Field1/Value1和Field2/Value2这两组列做长格式合并,然后按id+Field组合去重并对Value求和,同时处理缺失行。之前用stack没得到预期结果,是因为直接stack会把所有列都转成行,反而不如拆分两组再合并更精准。

分步实现代码

先构造你的输入数据(注意缺失值用pd.NA填充):

import pandas as pd

# 模拟输入数据,补全缺失值
data = {
    'id': [1, 1, 2, 3, 4, 3, 4],
    'Field1': ['A', 'A', 'A', 'C', 'E', 'A', 'F'],
    'Value1': [1, 0, 1, 1, 0, 1, 1],
    'Field2': ['B', pd.NA, 'D', 'A', pd.NA, 'C', pd.NA],
    'Value2': [0, pd.NA, 1, 0, pd.NA, 1, pd.NA]
}
df = pd.DataFrame(data)

接下来执行核心处理步骤:

# 1. 拆分两组字段并统一列名
# 处理Field1+Value1组
df_group1 = df[['id', 'Field1', 'Value1']].rename(columns={'Field1': 'Field', 'Value1': 'Value'})
# 处理Field2+Value2组,同时过滤掉Field为空的行(因为部分行没有Field2)
df_group2 = df[['id', 'Field2', 'Value2']].rename(columns={'Field2': 'Field', 'Value2': 'Value'}).dropna(subset=['Field'])

# 2. 合并两组数据为长格式
long_format_df = pd.concat([df_group1, df_group2], ignore_index=True)

# 3. 按id和Field组合去重,对Value求和
final_result = long_format_df.groupby(['id', 'Field'], as_index=False)['Value'].sum()

# 4. (可选)移除包含特定值的行,比如移除Value=0的行
# final_result = final_result[final_result['Value'] != 0]
# 或者移除Field为某个值的行,比如移除Field='B'的行
# final_result = final_result[final_result['Field'] != 'B']

print(final_result)

代码解释

  • 拆分合并:把Field1/Value1和Field2/Value2拆成两组,统一列名后合并,这样所有的Field和Value都在同一列里,方便后续分组。
  • 过滤缺失行:用dropna(subset=['Field'])去掉没有Field2的行,避免无效数据干扰。
  • 分组求和:groupby(['id', 'Field'])实现了id+Field的组合去重,sum()自动对同一组合的Value求和,完美匹配你的输出需求。

运行后得到的结果和你给出的预期输出完全一致:

id Field  Value
0   1     A      1
1   1     B      0
2   2     A      1
3   2     D      1
4   3     A      1
5   3     C      2
6   4     E      0
7   4     F      1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:39:19