添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
文雅的猴子  ·  Bug found in Data ...·  1 周前    · 
长情的火锅  ·  fetch : La fin de ...·  3 月前    · 
帅气的地瓜  ·  怎么动态修改css样式·  12 月前    · 
还单身的山寨机  ·  python - ...·  1 年前    · 
本内容来自:https://gairuo.com

分组是最为常见的数据操作,对数据分组后,我们可以将组成员按照指定的格式进行处理。在本需求中,我们要将数据分组后形成一个字典,字典的键是分组的名称,字典的值是所有组成员形成的一个列表,以实现将数据 JSON 格式输出。

源数据我们采用盖若网站提供的学习示例数据集:

import pandas as pd
pd.__version__
# '1.2.2'
df = pd.read_excel('https://gairuo.com/file/data/team.xlsx')
df.head()
    name team  Q1  Q2  Q3  Q4
0  Liver    E  89  21  24  64
1   Arry    C  36  37  37  57
2    Ack    A  57  60  18  84
3  Eorge    C  93  96  71  78
4    Oah    D  65  49  61  86

最终的数据是得到一个字典数据形式,键是分组 team 的组名,值是分组下所有 name 组成的列表。

先对数据按团队进行分组后,然后将姓名列聚合成列表,再用函数拼接成字典,最终将整体转化为列表。

以下是实现代码:

# 先对数据分组,然后name列聚合转换为列表
    df.groupby('team')
    .agg({'name': list})
A     [Ack, Lfie, Oscar, Joshua, Henry, Lucas, Arthu...
B     [Acob, Leo, Logan, Thomas, Harrison, Edward, S...
C     [Arry, Eorge, Harlie, Archie, Theo, William, D...
D     [Oah, Reddie, Ethan, Mason, Finley, Benjamin, ...
E     [Liver, James, Max, Isaac, Teddy, Riley, Josep...
# 去掉索引,方便矩阵操作,最后进行字典形式拼接
    df.groupby('team') # 分组
    .agg({'name': list}) # 用列表方法聚合
    .reset_index() # 去掉索引,方便矩阵操作
    .apply(lambda d: {d.team:d['name']}, axis=1)
0    {'A': ['Ack', 'Lfie', 'Oscar', 'Joshua', 'Henr...
1    {'B': ['Acob', 'Leo', 'Logan', 'Thomas', 'Harr...
2    {'C': ['Arry', 'Eorge', 'Harlie', 'Archie', 'T...
3    {'D': ['Oah', 'Reddie', 'Ethan', 'Mason', 'Fin...
4    {'E': ['Liver', 'James', 'Max', 'Isaac', 'Tedd...
dtype: object

得出以上结果后,我们可以把它整体用 to_list() 转化为列表,最终就是写了我们的需求。

以上代码要注意的有几点:

  • 数据分组后注明是索引,不方便做矩阵操作,因此我们要取消索引
  • 最后拼接字典是以列进行操作,所以 axis 设置为 1
  • name 列不能用属性的方法 d.name 方法,因为 name 是 Series 对象的一个内置属性,因此我们要用字典的取值方法
  •