Pandas DataFrame如何将两列逆序拼接的结果统一为固定值?
解决方案
核心逻辑是让无序的元素对得到固定的拼接结果,你可以根据需求选择以下两种实现方案:
方案1:固定排序规则法(性能高、结果可控,不依赖数据出现顺序)
对每行的两个元素按统一规则排序后再拼接,任意顺序的同一对元素都会得到相同结果:
按字典序升序拼接(小值在前,完全匹配你给出的单字符场景预期)
import pandas as pd # 单字符场景测试代码 df3=pd.DataFrame({'col1':['a','b','c','d','a'], 'col2':['b','a','a','c','c'], }) df3['col3'] = df3.apply(lambda row: ''.join(sorted([row['col1'], row['col2']])), axis=1)
输出结果:
col1 col2 col3 0 a b ab 1 b a ab 2 c a ac 3 d c cd 4 a c ac
按字典序降序拼接(大值在前,完全匹配你给出的多字符串场景预期)
import pandas as pd # 多字符串场景测试代码 df3=pd.DataFrame({'col1':['banana','apple','pie','mango','cola'], 'col2':['apple','banana','mango','cola','mango'], }) df3['col3'] = df3.apply(lambda row: ''.join(sorted([row['col1'], row['col2']], reverse=True)), axis=1)
输出结果:
col1 col2 col3 0 banana apple bananaapple 1 apple banana bananaapple 2 pie mango piemango 3 mango cola mangocola 4 cola mango mangocola
如果需要自定义排序规则(比如优先按字符串长度排序),可以修改sorted的key参数,示例:
# 先按字符串长度降序,长度相同再按字典序升序 df3['col3'] = df3.apply(lambda row: ''.join(sorted([row['col1'], row['col2']], key=lambda s: (-len(s), s))), axis=1)
方案2:首次出现匹配法(结果和数据出现顺序相关)
如果需要统一为该元素对第一次出现时的拼接值,可以用字典存储首次出现的结果,后续直接复用:
pair_map = {} col3_list = [] for _, row in df3.iterrows(): a, b = row['col1'], row['col2'] # 用frozenset作为无序对的唯一标识 pair = frozenset([a, b]) if pair not in pair_map: pair_map[pair] = a + b col3_list.append(pair_map[pair]) df3['col3'] = col3_list
内容的提问来源于stack exchange,提问作者김도영
相关产品推荐
相关产品推荐

