问题描述
我有一个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}