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

如何在Pandas DataFrame的两列中统计唯一组合的数量

解决Pandas无序列组合的计数问题

你遇到的核心问题是:默认的groupby会把(col1, col2)和(col2, col1)当成不同的组合统计,但你需要将这类无序组合视为同一个来计算出现次数。下面是具体的解决思路和代码实现:

思路解析

要实现无序组合的计数,关键是先把每一行的两个列值统一为有序形式(比如把(2,1)转换成(1,2)),让原本无序的组合变成一致的分组键,再进行统计就能得到正确结果。

具体代码实现

方案1:简洁直观的apply处理

适合小数据集,代码可读性强:

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({'col1': [1,2,4,3], 'col2': [2,1,3,4]})

# 对每行的col1和col2排序,生成统一的有序列
df[['sorted_col1', 'sorted_col2']] = df.apply(
    lambda row: pd.Series(sorted([row['col1'], row['col2']])), 
    axis=1
)

# 基于有序列分组统计,并重命名列得到最终结果
result = (df.groupby(['sorted_col1', 'sorted_col2'])
          .size()
          .reset_index(name='count')
          .rename(columns={'sorted_col1': 'col1', 'sorted_col2': 'col2'}))

print(result)

输出结果:

col1  col2  count
0     1     2      2
1     3     4      2

方案2:高效的向量化处理(适合大数据集)

如果你的DataFrame行数较多,apply的效率可能不足,可以用numpy的向量化排序操作,速度更快:

import pandas as pd
import numpy as np

df = pd.DataFrame({'col1': [1,2,4,3], 'col2': [2,1,3,4]})

# 用numpy对每行的两列值进行排序
sorted_vals = np.sort(df[['col1', 'col2']], axis=1)
df[['sorted_col1', 'sorted_col2']] = sorted_vals

# 分组统计并整理结果
result = (df.groupby(['sorted_col1', 'sorted_col2'])
          .size()
          .reset_index(name='count')
          .rename(columns={'sorted_col1': 'col1', 'sorted_col2': 'col2'}))

这个方法利用numpy的底层优化,比apply的循环处理效率提升明显。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:02:36