Python用于矩阵的列,其矩阵值由相应的列组成

时间:2014-03-03 17:09:21

标签: python python-2.7

我有这些数据,比如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

一个矩阵,其中值是已采用Fruit1Fruit2的不同人数。有人可以告诉我一种方法来做这个Python。感谢。

1 个答案:

答案 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,依此类推......

这不完全是一个矩阵,但是,提供的信息很难具体说明。