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

问题描述

我有一个Pandas Dataframe,我想将不同行中的多个元组列表合并为一个元组列表。该数据集具有1万多行,我想将所有元组列表添加一个元组列表中。


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

Desired output:

Edges =  [(AB,PPK),(AD,PKA),(FDC,PKD)]



解决方法

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

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

或使用chain.from_iterable获得更好的性能:

from  itertools import chain

Edges = list(chain.from_iterable(df.Description))
print (Edges)
[('AB','PKD')]
,

对于熊猫版本1+,您还可以使用explode方法:

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

输出:

[('AB','PKD')]
,

对于行数,重复的边会为您的应用程序带来问题吗?

如果是,请考虑集合类型而不是列表。然后,您可以将{{}:}与jezrael的优美理解一起使用。

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