2014-05-05 28 views
7

Giả sử tôi có một dataframe:Tạo một từ điển từ đối tượng groupby, Python

df = pd.DataFrame({'Type' : ['Pokemon', 'Pokemon', 'Bird', 'Pokemon', 'Bird', 'Pokemon', 'Pokemon', 'Bird'],'Name' : ['Jerry', 'Jerry', 'Flappy Bird', 'Mudkip','Pigeon', 'Mudkip', 'Jerry', 'Pigeon']}) 

và i nhóm nó theo kiểu:

print df.groupby(['Type','Name'])['Type'].agg({'Frequency':'count'}) 

          Frequency 
Type Name     
Bird Flappy Bird   1 
     Pigeon    2 
Pokemon Jerry    3 
     Mudkip    2 

thể tôi tạo ra một từ điển từ nhóm trên? ? Các chính"Bird" sẽ có một giá trị của danh sách có chứa ['Pigeon',Flappy Bird'] lưu ý rằng tên cao tần sẽ xuất hiện đầu tiên trong danh sách Value.

Output dự kiến:

dict1 = { 'Bird':['Pigeon','Flappy Bird'] , 'Pokemon':['Jerry','Mudkip'] } 

Trả lời

8

Bạn có thể tạo một từ điển sử dụng một sự hiểu biết từ điển như sau

df = pd.DataFrame({'Type' : ['Pokemon', 'Pokemon', 'Bird', 'Pokemon', 'Bird', 'Pokemon', 'Pokemon', 'Bird'],'Name' : ['Jerry', 'Jerry', 'Flappy Bird', 'Mudkip','Pigeon', 'Mudkip', 'Jerry', 'Pigeon']}) 
f = df.groupby(['Type','Name'])['Type'].agg({'Frequency':'count'}) 
f.sort('Frequency',ascending=False, inplace=True) 

d = {k:list(f.ix[k].index) for k in f.index.levels[0]} 
print(d) 
# {'Bird': ['Pigeon', 'Flappy Bird'], 'Pokemon': ['Jerry', 'Mudkip']} 

Các hiểu từ điển sẽ lặp qua các chỉ số bên ngoài ('chim', 'Pokemon ') và sau đó đặt giá trị làm chỉ mục bên trong cho từ điển của bạn.

Trước tiên, bạn cần sắp xếp MultiIndex của mình theo cột Frequency để nhận được thứ tự bạn muốn.

+1

'DataFrame.sort()' không còn được dùng nữa và hiện đã bị xóa. Sử dụng 'f.sort_values ​​()' ngay bây giờ. – dankal444

Các vấn đề liên quan