Python实现A→B与B→A组合的计数合并需求
合并双向配对计数的Python实现
方法1:使用Pandas(适合表格数据)
如果你的数据是DataFrame格式(比如从CSV/Excel导入的两列数据),可以通过标准化配对顺序(将每个配对按字典序排序,把NYC→LA和LA→NYC统一成(LA, NYC)),再分组求和:
import pandas as pd # 示例数据 df = pd.DataFrame({ 'A': ['NYC', 'LA', 'NYC', 'CHI', 'LA'], 'B': ['LA', 'NYC', 'CHI', 'NYC', 'CHI'], 'count': [2, 3, 1, 4, 2] }) # 标准化配对:将每个(A,B)转换为排序后的元组 df['pair'] = df.apply(lambda row: tuple(sorted((row['A'], row['B']))), axis=1) # 分组求和 result = df.groupby('pair')['count'].sum().reset_index() # 可选:将配对拆回两列 result[['city1', 'city2']] = pd.DataFrame(result['pair'].tolist(), index=result.index) result = result.drop('pair', axis=1) print(result)
输出会自动合并双向配对的计数(比如NYC→LA和LA→NYC的计数合并为5)。
方法2:原生Python字典(适合列表/元组数据)
如果是原始的配对列表(比如[('NYC','LA'), ('LA','NYC'), ...]),可以用字典统计,同样先标准化配对:
# 示例数据:每个元素是(起点, 终点, 计数) pairs = [('NYC', 'LA', 2), ('LA', 'NYC', 3), ('NYC', 'CHI', 1), ('CHI', 'NYC',4), ('LA','CHI',2)] count_dict = {} for a, b, cnt in pairs: # 排序后作为字典的键,确保双向配对共用同一个键 key = tuple(sorted((a, b))) count_dict[key] = count_dict.get(key, 0) + cnt # 转换为可读格式 result = [(k[0], k[1], v) for k, v in count_dict.items()] print(result)
输出:[('LA', 'NYC', 5), ('CHI', 'NYC', 5), ('CHI', 'LA', 2)]
核心逻辑都是通过排序统一双向配对的标识,不管配对顺序如何,都会被归为同一组统计。
内容的提问来源于stack exchange,提问作者efullenkamp
相关产品推荐
相关产品推荐

