2014-03-03 122 views
0

我有這些數據,說D1:的Python由相應列與矩陣值的列的矩陣

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。謝謝。

+0

什麼'type'是d1?列表,字典等 – Drewness

+0

你是否在計算'水果'每個人'或'Furit'到'水果'? –

+0

我正在計算不同水果的水果。 – user3371626

回答

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,依此類推......

它不完全是一個矩陣,但是,它很難對所提供的信息更加具體。

+0

謝謝,但這並不是我期待的。爲了做到更多,我想要一個類似交叉表的交叉表,我的水果子類別是行和列,值相關聯的是不同的人在吃它。我希望這更有意義。 – user3371626

+0

只是爲了讓它更清晰我想要這樣的鏈接http://stackoverflow.com/q/13176741/3371626在Python中。這在R中完成。 – user3371626