如何统计两列字符串无序组合的出现次数(含单列场景)
无序字符串组合计数的可行实现方法
一、Excel/Google Sheets 方案
针对两列输入(Fruit A、Fruit B)
- 生成标准化组合:在空白列(如C列)输入公式,将每行的两个水果按字母顺序排序后拼接,统一无序组合的格式:
下拉填充至所有行,得到标准化的组合列。=IF(A2<B2, A2&", "&B2, B2&", "&A2) - 统计出现次数:
- 函数法:在D2输入
=COUNTIF(C:C, C2),下拉填充即可得到每行组合的计数。 - 数据透视表法:选中C列,插入数据透视表,将组合字段拖至「行区域」,再拖至「值区域」并选择「计数」。
- 函数法:在D2输入
针对单列输入(Fruits)
- 拆分并标准化组合:使用公式拆分字符串后排序拼接,统一格式:
下拉填充得到标准化列后,后续统计步骤与两列输入一致。=LET(split_fruits, TEXTSPLIT(A2, ", "), sorted, SORT(split_fruits), TEXTJOIN(", ", TRUE, sorted))
二、Python 方案(基于Pandas)
针对两列输入
import pandas as pd # 构造示例数据 df = pd.DataFrame({ "Fruit A": ["Banana", "Pear", "Apple", "Apple", "Banana"], "Fruit B": ["Apple", "Apricot", "Banana", "Pear", "Apple"] }) # 生成标准化组合 df["Combination"] = df.apply(lambda row: ", ".join(sorted([row["Fruit A"], row["Fruit B"]])), axis=1) # 统计次数并整理结果 result = df["Combination"].value_counts().reset_index() result.columns = ["Combination", "Occurence"] print(result)
针对单列输入
import pandas as pd # 构造示例数据 df = pd.DataFrame({ "Fruits": ["Banana, Apple", "Pear, Apricot", "Apple, Banana", "Apple, Pear", "Banana, Apple"] }) # 拆分、排序并生成标准化组合 df["Combination"] = df["Fruits"].apply(lambda x: ", ".join(sorted(x.split(", ")))) # 统计次数 result = df["Combination"].value_counts().reset_index() result.columns = ["Combination", "Occurence"] print(result)
三、SQL 方案
针对两列输入(表名fruit_pairs)
SELECT CASE WHEN fruit_a < fruit_b THEN CONCAT(fruit_a, ', ', fruit_b) ELSE CONCAT(fruit_b, ', ', fruit_a) END AS Combination, COUNT(*) AS Occurence FROM fruit_pairs GROUP BY Combination ORDER BY Occurence DESC;
针对单列输入(表名fruit_list,以PostgreSQL为例)
WITH split_fruits AS ( SELECT UNNEST(STRING_TO_ARRAY(fruits, ', ')) AS fruit, id FROM fruit_list ), sorted_pairs AS ( SELECT id, STRING_AGG(fruit, ', ' ORDER BY fruit) AS Combination FROM split_fruits GROUP BY id ) SELECT Combination, COUNT(*) AS Occurence FROM sorted_pairs GROUP BY Combination ORDER BY Occurence DESC;
内容的提问来源于stack exchange,提问作者hugo thierry
相关产品推荐
相关产品推荐

