Python中按索引合并列表
场景:我从一个N-triples文件中检索了3个列表,现在我正试图将它们合并成一个单一的、有组织的列表 原始格式:Python中按索引合并列表,python,list,Python,List,场景:我从一个N-triples文件中检索了3个列表,现在我正试图将它们合并成一个单一的、有组织的列表 原始格式: +--------+---------+--------+ | 100021 | hasdata | y | +--------+---------+--------+ | 100021 | name | USER1 | +--------+---------+--------+ | 100021 | extra1 | typer | +--------+--
+--------+---------+--------+
| 100021 | hasdata | y |
+--------+---------+--------+
| 100021 | name | USER1 |
+--------+---------+--------+
| 100021 | extra1 | typer |
+--------+---------+--------+
| 100021 | extra2 | reader |
+--------+---------+--------+
| 50003 | hasdata | y |
+--------+---------+--------+
| 50003 | name | USER2 |
+--------+---------+--------+
| 50003 | extra1 | reader |
+--------+---------+--------+
| 50003 | extra2 | writer |
+--------+---------+--------+
| 50003 | extra3 | coder |
+--------+---------+--------+
| 30007 | hasdata | n |
+--------+---------+--------+
| 30007 | name | 0001 |
+--------+---------+--------+
| 30007 | extra1 | Null |
+--------+---------+--------+
在循环ntriples文件时,我生成了3个列表(每个列表都是上表的一列)。我现在正试图将它们匹配成如下内容:
+--------+---------+-------+--------+--------+--------+
| | hasdata | name | extra1 | extra2 | extra3 |
+--------+---------+-------+--------+--------+--------+
| 100021 | y | USER1 | typer | reader | |
+--------+---------+-------+--------+--------+--------+
| 50003 | y | USER2 | reader | writer | coder |
+--------+---------+-------+--------+--------+--------+
| 30007 | extra2 | n | 0001 | Null | |
+--------+---------+-------+--------+--------+--------+
到目前为止,我使用了以下功能:
def listOfTuples(l1, l2, l3):
return list(map(lambda x, y, z:(x,y, z), l1, l2, l3))
但这只给了我一个直接合并的对应项目
问题:我知道可以在列表中循环,获取匹配项并手动构建数组/数据帧。我的问题是,是否有任何函数或包可以自动并以一种不太复杂的方式实现这一点
Obs:我已经有了通过手动循环生成数据帧的方法。我只是想知道是否还有其他更有效的方法。如果我理解正确,您有一个包含三个对象大小的元组元素的列表,您想将它们放在另一个元组中,您可以使用
zip
来实现这一点
result = list(zip(list1, zip(*[(l1,l2,l3) for i in list1])))
你说你想要一个数据帧,所以我假设熊猫操作是可以接受的 我还假设符号只是格式化的,而不是实际数据文件的一部分(将来,这些装饰器是不必要的,甚至对这些类型的问题有害) 使用给定的数据,我创建了一个df(
pd.read_csv
或类似的文件),然后对其进行透视
col1 col2 col3
0 100021 hasdata y
1 100021 name USER1
2 100021 extra1 typer
3 100021 extra2 reader
4 50003 hasdata y
5 50003 name USER2
6 50003 extra1 reader
7 50003 extra2 writer
8 50003 extra3 coder
9 30007 hasdata n
10 30007 name 0001
11 30007 extra1 Null
df.pivot(index='col1',columns='col2',values='col3')
col2 extra1 extra2 extra3 hasdata name
col1
30007 Null NaN NaN n 0001
50003 reader writer coder y USER2
100021 typer reader NaN y USER1
我只是尝试了一下,但要么我不知道如何正确实施,要么我不知道如何解释结果。我得到的是:@DGMS89哦,对不起,你必须使用列表(zip),修复了这个问题。@DGMS89还有另一件事,我假设你的l1,l2,l3是值(从我从你的代码中看到的),如果它们是列表,应该做一些小的调整。我会尝试处理这个问题。我唯一没有得到的是,项目的匹配应该分为两个级别(列表1和列表2)来设置结果(列表3),但使用zip,到目前为止,我只能按列表1进行索引。@DGMS89能否在
listOfTuples
函数中对l1、l2和l3进行分类?那么x,y,z是什么。我从你的问题中了解到的是,每行都有一个元组列表(你的n_三元组)。是的,我忘了pivot。它确实有效,但我的问题是我的ntriples文件大6.5gb,这就是我尝试处理列表的原因。这是有道理的,但在您最初的问题中,作为约束条件,这将是一个很好的细节