Python数据分析中Groupby用法之通过字典或Series进行分组的实例

Ruby
Ruby
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍在Python数据分析中,如何利用字典或Series对象对DataFrame进行自定义分组。通过示例演示了groupby方法在列方向上的应用,展示了如何将多个列映射到同一组别(如red、blue)并执行聚合计算。对比发现字典与Series分组原理一致,均通过键值匹配实现数据归类,为灵活处理复杂数据结构提供了实用方案。

在数据分析场景中,有时需要根据自定义规则对数据进行分组。本文简要介绍如何使用字典来实现这一分组过程。

people=DataFrame(
  np.random.randn(5,5),
  columns=['a','b','c','d','e'],
  index=['Joe','Steve','Wes','Jim','Travis']
)
mapping={'a':'red','b':'red','c':'blue','d':'blue','e':'red','f':'orange'}
by_column=people.groupby(mapping,axis=1)#列方向上进行分组

由于不清楚Python底层的具体运行机制,建议通过打印运行结果来直观观察处理过程。

for i in by_column:
  print (i)

遍历分组对象的结果如下:

('blue',  c     d
Joe   0.218189 -0.228336
Steve  1.677264 0.630303
Wes   0.315320 -0.250787
Jim   3.343462 0.483021
Travis 0.854553 -0.760884)
('red',   a     b     e
Joe   0.218164 0.823654 -1.425720
Steve  1.191175 -0.327735 1.926470
Wes  -1.418855 0.497466 0.110105
Jim  -1.157157 0.817122 0.749023
Travis -0.440583 -0.907922 1.374294)

从输出结果可以看出,列标签a、b、e被归入了red组,而c、d被归入了blue组。

a b e--->red

c d --->blue

接下来执行代码 people.groupby(mapping,axis=1).mean()。

      blue    red
Joe   0.241336 -0.182099
Steve  0.459773 -0.448336
Wes   0.205278 0.605721
Jim  -0.094838 1.254174
Travis 0.354140 0.142075

结果显示,在列方向上进行groupby分组并执行聚合函数mean()后,结果DataFrame的列索引仅包含blue和red。

整个过程可理解为:在列方向上进行分组,将a、b、e归为一组标记为red,c、d归为一组标记为blue。最终,以red和blue作为新DataFrame的列索引。

Series同样具备此功能,可视为固定大小的映射。针对上述示例,若使用Series作为分组键,pandas会检查Series以确保其索引与分组轴对齐:

ser=Series(mapping) a red b red c blue d blue e red f orange

by_ser_group=people.groupby(ser,axis=1).mean()

blue red Joe 0.241336 -0.182099 Steve 0.459773 -0.448336 Wes 0.205278 0.605721 Jim -0.094838 1.254174 Travis 0.354140 0.142075

从结果可见,通过字典分组与通过Series分组的结果一致。这表明两者执行原理相同,均是将索引(针对Series)或字典的key与DataFrame的列索引进行匹配。

字典中的value或Series中的values值相同的项会被分到同一组,随后根据各组数据进行聚合计算。

groupby的用法十分丰富,后续如有时间将陆续更新博客。若文中存在错误,欢迎指出,共同学习进步。

以上关于Python数据分析中Groupby用法之通过字典或Series进行分组的实例即为全部内容,希望能提供参考,感谢支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表