看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
分组是最为常见的数据操作,对数据分组后,我们可以将组成员按照指定的格式进行处理。在本需求中,我们要将数据分组后形成一个字典,字典的键是分组的名称,字典的值是所有组成员形成的一个列表,以实现将数据 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})
)
'''
name
team
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() 转化为列表,最终就是写了我们的需求。
以上代码要注意的有几点:
更新时间:Aug. 18, 2024, 3:41 p.m. 标签:pandas 分组 字典