如何按年对column1和column2无序分组并计算每组Count总和
实现方案
Python 方法(基于pandas)
核心思路是为每一行生成不考虑column1、column2顺序的唯一配对标识,再按年度+配对标识分组求和。
- 第一步:读取csv文件
import pandas as pd # 替换为你的文件实际路径 df = pd.read_csv("data.csv")
- 第二步:生成无顺序配对键
# 对每行的column1、column2排序后转为元组,作为唯一配对标识 df["pair"] = df.apply(lambda row: tuple(sorted([row["column1"], row["column2"]])), axis=1)
- 第三步:分组求和统计
# 按年度、配对键分组,对Count求和 res = df.groupby(["Year", "pair"])["Count"].sum().reset_index() # 可选:把配对键拆回两列展示 res[["column1", "column2"]] = pd.DataFrame(res["pair"].tolist(), index=res.index) res = res.drop(columns=["pair"])
按示例数据,1990年的(A,B)和(B,A)会生成相同的('A','B')配对键,求和后Count结果为15,符合要求。
Excel 方法
核心思路是新增辅助列生成无顺序配对标识,再通过数据透视表完成统计。
- 第一步:新增配对辅助列
假设你的数据A列为column1、B列为column2、C列为Count、D列为Year,表头在第1行,数据从第2行开始。新增E列,列名设为pair,E2单元格输入公式:=IF(A2<B2, A2&"|"&B2, B2&"|"&A2)
将公式下拉填充至所有数据行,公式会自动把两个列值按字典序排序后拼接,不管排列顺序相同配对的生成值完全一致。 - 第二步:插入数据透视表统计
选中所有数据区域,点击「插入」选项卡→「数据透视表」,按如下配置:- 行区域:依次放入Year、pair字段
- 值区域:放入Count字段,汇总方式选择「求和」
- 可选拆分配对列:如果需要把pair列拆回两个单独列,选中pair列,点击「数据」选项卡→「分列」,分隔符选择「其他」输入
|,完成拆分即可。
内容的提问来源于stack exchange,提问作者Wind Brother
相关产品推荐
相关产品推荐

