Python:创建一个列表列表

Python:创建一个列表列表,python,pandas,Python,Pandas,我正在尝试创建一个列表列表。我有下面的数据集 ID date product A 01/01/2018 1 A 01/01/2018 2 A 02/01/2018 2 B 01/01/2018 3 B 01/01/2018 4 B 02/01/2018 2 B 04/01/2018 1 B 04/01/2018 2 B 04/01/2018 3 目标是创建此类列表: [[[1,2], [2]], [[3,4],[2],[1,2,3]

我正在尝试创建一个列表列表。我有下面的数据集

ID  date    product
A   01/01/2018  1
A   01/01/2018  2
A   02/01/2018  2
B   01/01/2018  3
B   01/01/2018  4
B   02/01/2018  2
B   04/01/2018  1
B   04/01/2018  2
B   04/01/2018  3
目标是创建此类列表:

[[[1,2], [2]], [[3,4],[2],[1,2,3]]]

最外面的列表对应于客户ID,中间的列表对应于购买产品的日期,最里面的列表对应于产品。

您可以使用两个应用程序来实现这一点,一个是按ID分组,另一个是按日期分组

下面的代码使用三层嵌套的列表理解,它很紧凑,但不容易阅读。我很快会发布一个较长的版本

from itertools import groupby
from operator import itemgetter

data = '''\
ID  date    product
A   01/01/2018  1
A   01/01/2018  2
A   02/01/2018  2
B   01/01/2018  3
B   01/01/2018  4
B   02/01/2018  2
B   04/01/2018  1
B   04/01/2018  2
B   04/01/2018  3
'''

data = (row.split() for row in data.splitlines())

#skip header
next(data)

result = [[[u[-1] for u in group]
    for _, group in groupby(row, itemgetter(1))]
        for _, row in groupby(data, itemgetter(0))]

print(result)
输出

[[['1', '2'], ['2']], [['3', '4'], ['2'], ['1', '2', '3']]]
[[[1, 2], [2]], [[3, 4], [2], [1, 2, 3]]]

这里有一个版本(大部分)使用传统的
进行
循环。它还将产品编号从字符串转换为整数

from itertools import groupby
from operator import itemgetter

data = '''\
ID  date    product
A   01/01/2018  1
A   01/01/2018  2
A   02/01/2018  2
B   01/01/2018  3
B   01/01/2018  4
B   02/01/2018  2
B   04/01/2018  1
B   04/01/2018  2
B   04/01/2018  3
'''

data = (row.split() for row in data.splitlines())

#skip header
next(data)

ig1 = itemgetter(1)
result = []
for _, row in groupby(data, itemgetter(0)):
    sublist = []
    for _, group in groupby(row, ig1):
       sublist.append([int(u[-1]) for u in group])
    result.append(sublist)

print(result)
输出

[[['1', '2'], ['2']], [['3', '4'], ['2'], ['1', '2', '3']]]
[[[1, 2], [2]], [[3, 4], [2], [1, 2, 3]]]

你一定要这样对待熊猫吗?您当前的代码是什么样子的?有什么问题吗?我见过比这更糟糕的问题,分数高得多。@PM2Ring您是对的。我假设它是一个数据帧,但可以是一个简单的CSV格式。我想我们走着瞧吧。我道歉。@PM2Ring,是熊猫的。对不起,我没有在我的帖子中提到它(第一次在StackOverflow上)。@AntonvBR看起来你猜对了