2015-11-13 94 views

回答

1

假設您的數據框被命名爲df。你可以得到行號使用df.groupby('ID').groups每個ID:

group_rows = df.groupby('ID').groups 

我們將通過各組ID重複,然後用CounterCol1Col2計數的值。然後我會將這些添加到字典中。

from collections import Counter 

my_dict = {} 
for group_id, rows in group_rows.iteritems(): 
    c = Counter(df.iloc[rows, 1]) # 1 = index number for `Col1` 
    c.update(df.iloc[rows, 2]) # 2 = index number for `Col2` 
    my_dict[group_id] = dict(c) 

>>> my_dict 
{1: {'A': 2, 'B': 1, 'Y': 1, 'Z': 2}, 
2: {'A': 1, 'C': 1, 'P': 1, 'X': 1}} 

我選擇將結果輸出到一個字典,而不是你的要求列表中,這樣的組ID和計數值之間的關係是明確的。如果這是一個問題,我可以通過假定數據框首先按ID列進行排序,將它們轉換爲列表。

keys = my_dict.keys() 
keys.sort() 
my_list = [my_dict[k] for k in keys] 
>>> my_list 
[{'A': 2, 'B': 1, 'Y': 1, 'Z': 2}, {'A': 1, 'C': 1, 'P': 1, 'X': 1}] 
相關問題