在Python中按索引合并列表

2024-09-29 04:24:15 发布

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

场景:我从一个N-triples文件中检索了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)) 

但这只给了我一个直接合并相应的项目。你知道吗

问题:我知道可以在列表中循环,获取匹配项并手动构建数组/数据帧。我的问题是,有没有任何函数或包可以自动地以一种不那么复杂的方式来实现这一点?你知道吗

Obs:我已经有了一种通过手动循环生成数据帧的方法。我只是想知道还有没有更有效的方法。你知道吗


Tags: 文件函数name列表nullreaderwritercoder
2条回答

如果我理解正确的话,您有一个列表,其中包含大小为三个对象的元组元素,您希望将它们放入另一个元组中,您可以使用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

相关问题 更多 >