场景::我从N个三元组文件中检索了3个列表,现在我试图将它们组合成一个单一的,有组织的列表。
原始格式:
+--------+---------+--------+
| 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))
但这仅使我直接合并了对应项。
问题::我知道可以遍历列表并获取匹配项并手动构建数组/数据框。我的问题是,是否有任何函数或程序包可以自动且以较少混淆的方式执行此操作?
肥胖:我已经可以通过手动循环来生成数据框。我只是想知道是否还有另一种更有效的方法。
答案 0 :(得分:3)
如果我对您的理解正确,那么您将获得一个列表,其中包含具有三个对象大小的元组元素,并且您希望将它们放入另一个元组中。可以使用zip
来实现。
result = list(zip(list1, zip(*[(l1,l2,l3) for i in list1])))
答案 1 :(得分:1)
您说您想要一个数据框,因此我将假设熊猫操作是可以接受的。
我还假设这些符号仅是您设置的格式,而不是实际数据文件的一部分(将来,此类修饰符是不必要的,甚至对此类问题均有害)
使用给定的数据,我创建一个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