如何对DataFrame某列中的元组进行内部排序?
解决DataFrame中元组列内部排序的问题
嘿,这个需求处理起来很简单,用pandas的apply方法配合Python内置的sorted()函数就能轻松搞定,直接上步骤和代码:
1. 先构造你的原始DataFrame
首先把你给出的数据转换成可操作的pandas DataFrame:
import pandas as pd # 原始数据 data = { 'pid': ['0000000F', '00000017', '00000019', '00000025', '0000003A'], 'aid': [('0BDEAC61', '288E046F'), ('7795AF0D', '4A259AFA', '7DA84B6E'), ('8123B8CF', '3A25A1FE'), ('28045D98', '8043B6E5', '81195E5D'), ('7D566708', '7F5583AE')] } df = pd.DataFrame(data)
2. 对元组列进行内部排序
核心代码就一行,遍历aid列的每个元组,排序后再转回元组(保持原数据类型):
# 对每个元组内部排序,转回元组以匹配原始类型 df['aid'] = df['aid'].apply(lambda x: tuple(sorted(x)))
代码解释:
df['aid'].apply(...):遍历aid列的每一个元素(也就是每个元组)sorted(x):把元组x转换成排序后的列表(默认按字符串字典序排序,刚好适配你给出的十六进制字符串排序需求)tuple(...):把排序后的列表转回元组,保证列的类型和原始数据一致
3. 查看最终结果
运行完上面的代码后,打印DataFrame就能得到你想要的结果:
print(df)
输出结果:
pid aid 0 0000000F (0BDEAC61, 288E046F) 1 00000017 (4A259AFA, 7795AF0D, 7DA84B6E) 2 00000019 (3A25A1FE, 8123B8CF) 3 00000025 (28045D98, 8043B6E5, 81195E5D) 4 0000003A (7D566708, 7F5583AE)
如果需要自定义排序规则(比如按十六进制数值大小排序),只需要给sorted()加上key参数就行,示例如下:
# 按十六进制数值大小排序元组内元素 df['aid'] = df['aid'].apply(lambda x: tuple(sorted(x, key=lambda s: int(s, 16))))
内容的提问来源于stack exchange,提问作者BKS
相关产品推荐
相关产品推荐

