我有这些数据,比如d1:
Fruits Person
Mango 1
Banana 1
Orange 2
Mango 1
Banana 3
Orange 1
Mango 2
Banana 3
Orange 2
Mango 2
我希望输出是这样的:
Fruit2
Fruit1 Mango Banana Orange
Mango 2 0 2
Banana 0
Orange
一个矩阵,其中值是已采用Fruit1
和Fruit2
的不同人数。有人可以告诉我一种方法来做这个Python。感谢。
答案 0 :(得分:0)
在不知道你的数据集是什么type
的情况下,我假设它是基于你所呈现的结构的元组列表。
因此,如果fruit1
是元组列表,并且每个元组都包含水果的名称和人的ID。使用列表理解,您可以计算水果和人物一起出现的次数,如下所示:
import itertools
fruit1 = [
('Mango', 1),
('Banana', 1),
('Orange', 2),
('Mango', 1),
('Banana', 3),
('Orange', 1),
('Mango', 2),
('Banana', 3),
('Orange', 2),
('Mango', 2),
]
# define sort order (person, fruit)
keyfunc = lambda t: (t[1], t[0])
# sort fruit1
fruit1.sort(key=keyfunc)
# create fruit2
fruit2 = [(len(list(val)), key) for (key, val) in itertools.groupby(fruit1, keyfunc)]
# output
[
(1, (1, 'Banana')),
(2, (1, 'Mango')),
(1, (1, 'Orange')),
(2, (2, 'Mango')),
(2, (2, 'Orange')),
(2, (3, 'Banana')),
]
正如您所看到的,fruit2
是一个元组列表,就像fruit1
一样,增加了水果/人的出现次数。因此,Person 1
有1个条目或Banana
,2个用于Mango
,依此类推......
这不完全是一个矩阵,但是,提供的信息很难具体说明。