将数据帧中的行中的元组列表转换为一个元组列表

2024-05-21 00:03:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框架,我想将不同行中的多个元组列表合并到一个元组列表中。数据集有10000多行,我想将所有元组列表添加到一个元组列表中


InvoiceNo      Description    
534            [(AB, AC), (ACBO, PPK)]
415            [(AD, AT), (CBO, PKD), (CBO, PKA)]
315            [(FDC, ATO), (VBO, IKD), (CVB, PKD)]

Desired output:

Edges =  [(AB, AC), (ACBO, PPK), (AD, AT), (CBO, PKD), (CBO, PKA), (FDC, ATO), (VBO, IKD), (CVB, PKD)]




Tags: 数据列表abadacat元组fdc
3条回答

对于行数,重复的边是否会给应用程序带来问题

如果是,请考虑SET类型而不是列表。然后,您可以使用jezrael的美丽理解一行加{}:

Edges = {y for x in df.Description for y in x}

将列表理解与扁平嵌套元组列表一起使用:

Edges = [y for x in df.Description for y in x]
print (Edges)
[('AB', 'AC'), ('ACBO', 'PPK'), ('AD', 'AT'), ('CBO', 'PKD'), 
 ('CBO', 'PKA'), ('FDC', 'ATO'), ('VBO', 'IKD'), ('CVB', 'PKD')]

chain.from_iterable以获得更好的性能:

from  itertools import chain

Edges = list(chain.from_iterable(df.Description))
print (Edges)
[('AB', 'AC'), ('ACBO', 'PPK'), ('AD', 'AT'), ('CBO', 'PKD'), 
 ('CBO', 'PKA'), ('FDC', 'ATO'), ('VBO', 'IKD'), ('CVB', 'PKD')]

对于熊猫版本1+,也可以使用“分解”方法:

df['Description'].explode().tolist()

输出:

[('AB', 'AC'), ('ACBO', 'PPK'), ('AD', 'AT'), ('CBO', 'PKD'), ('FDC', 'ATO'), ('VBO', 'IKD'), ('CVB', 'PKD')]

相关问题 更多 >