如何在不使用循环的情况下将列表FamousAuthors汇总到另一本词典



在以下著名作者列表中,元组中的每个元组都有以下项:(作者,出售的副本,编写的书籍,国籍(

FamousAuthors =
[(‘Agatha Christie’, 3000000, 85, ‘English’),
(‘William Shakespeare’, 3000000, 42, ‘English’),
(‘Barbara Cartland’, 750000, 723, ‘English’),
(‘Danielle Steel’, 650000, 179, ‘American’),
(‘Harold Robbins’, 750000, 23, ‘American’),
(‘Georges Simenon’, 600000, 570, ‘Belgian’),
(‘Enid Blyton’, 500000, 800, ‘English’),
(‘Sidney Sheldon’, 485000, 21, ‘American’),
(‘Gilbert Patten’, 312500, 209, ‘American’),
(‘Dr. Seuss’, 300000, 44, ‘American’),
(‘J. K. Rowling’, 280000, 15, ‘English’)]

创建一个字典结构来汇总FamousAuthors中的数据,其中每个键都是国籍和相应的值是一个元组,包含a.作者数量,b.售出的总拷贝数,c.总共写了几本书。该国籍。显示字典

我只能用for循环来写这个。你能告诉我一些更直观、更简单的方法吗?

每当遇到这样的问题时,答案总是panda。为您的任务使用字典是非常不切实际的,因为您需要迭代这些项。

将您的列表转换为DataFrame第一个

import pandas as pd
FamousAuthors = [
('Agatha Christie', 3000000, 85, 'English'),
('William Shakespeare', 3000000, 42, 'English'),
('Barbara Cartland', 750000, 723, 'English'),
('Danielle Steel', 650000, 179, 'American'),
('Harold Robbins', 750000, 23, 'American'),
('Georges Simenon', 600000, 570, 'Belgian'),
('Enid Blyton', 500000, 800, 'English'),
('Sidney Sheldon', 485000, 21, 'American'),
('Gilbert Patten', 312500, 209, 'American'),
('Dr. Seuss', 300000, 44, 'American'),
('J. K. Rowling', 280000, 15, 'English')
]
df = pd.DataFrame(FamousAuthors, columns=['author', 'copies',  'books', 'nationality'])

大熊猫的美妙之处在于,它非常具有陈述性,就好像你在和某人说话一样。

df.groupby('nationality').sum().T.to_dict('list')

{'American': [2497500, 476],
'Belgian': [600000, 570],
'English': [7530000, 1665]}

编辑

还增加了按国籍划分的作者人数:

df.groupby('nationality').agg({'author': 'count', 'copies': 'sum', 'books': 'sum'}).T.to_dict('list')
{'American': [5, 2497500, 476],
'Belgian': [1, 600000, 570],
'English': [5, 7530000, 1665]}

如注释中所解释的,CCD_ 2表示转置。

最新更新