Python函数:groupby()

形式:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True)

分组操作涉及到分离对象、应用函数和组合结果的一些组合。这可以用于对大量数据进行分组,并计算对这些分组的操作。

  • by:用于确定 groupby 的组。 如果 by 是一个函数,它会在对象索引的每个值上调用。 如果传递了 dict 或 Series,则 Series 或 dict VALUES 将用于确定组(Series 的值首先对齐;参见 .align() 方法)。 如果传递了长度等于所选轴的列表或 ndarray,则按原样使用这些值来确定组。 一个标签或标签列表可以通过 self 中的列传递给 group。 请注意,元组被解释为(单个)键。
  • axis:沿行 (0) 或列 (1) 拆分。
  • level:如果轴是MultiIndex(层次化),则按一个或多个特定级别进行分组。
  • as_index:对于聚合输出,返回具有组标签作为索引的对象。仅与DataFrame输入相关。as index=False是有效的sql风格的分组输出。
  • sort:对组键进行排序。 关闭此功能可获得更好的性能。 请注意,这不会影响每组内的观察顺序。 Groupby 保留每个组内的行顺序。
  • group_keys:当调用apply时,将组键添加到index以识别片段。
  • squeeze:如果可能,降低返回类型的维数,否则返回一致的类型。
  • observed:这仅适用于任何 groupers 是分类的。 如果为真:仅显示分类分组的观察值。 如果为 False:显示分类分组的所有值。
  • dropna:如果为 True,并且组键包含 NA 值,则 NA 值连同行/列将被删除。 如果为 False,NA 值也将被视为组中的键。

(上面的看不懂没事,我也看不懂,下面有例子)

在终端运行

>>> import pandas as pd
>>> df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
...                               'Parrot', 'Parrot'],
...                    'Max Speed': [380., 370., 24., 26.]})
>>> df
   Animal  Max Speed
0  Falcon      380.0
1  Falcon      370.0
2  Parrot       24.0
3  Parrot       26.0
>>> df.groupby(['Animal']).mean()   #按照Animal列的值进行分组,分组后的falcon对应的MaxSpreed是
                                     原来falcon对应的MaxSpreed的均值
        Max Speed
Animal
Falcon      375.0
Parrot       25.0
我们可以使用level参数对层次索引的不同级别进行分组:
>>> arrays = [['Falcon', 'Falcon', 'Parrot', 'Parrot'],
...           ['Captive', 'Wild', 'Captive', 'Wild']]
>>> arrays
[['Falcon', 'Falcon', 'Parrot', 'Parrot'], ['Captive', 'Wild', 'Captive', 'Wild']]
>>> index = pd.MultiIndex.from_arrays(arrays, names=('Animal', 'Type'))  #创建多层次索引
>>> index
MultiIndex([('Falcon', 'Captive'),
            ('Falcon',    'Wild'),
            ('Parrot', 'Captive'),
            ('Parrot',    'Wild')],
           names=['Animal', 'Type'])                            #输出看看
>>> df = pd.DataFrame({'Max Speed': [390., 350., 30., 20.]},
...                   index=index)
>>> df
                Max Speed
Animal Type
Falcon Captive      390.0
       Wild         350.0
Parrot Captive       30.0
       Wild          20.0
>>> df.groupby(level=0).mean()               #对一层索引做分组
        Max Speed
Animal
Falcon      370.0
Parrot       25.0
>>> df.groupby(level="Type").mean()          #对Type层索引做分组,自己指定的,相当于level=1
                                                  的结果
         Max Speed
Type
Captive      210.0
Wild         185.0
>>> df.groupby(level=1).mean()
         Max Speed
Type
Captive      210.0
Wild         185.0
我们可以通过设置dropna参数来选择是否将NA包含在组键(理解为行)中,默认设置为True。
>>> l = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]]
>>> l
[[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]]
>>> df = pd.DataFrame(l, columns=["a", "b", "c"])
>>> df
   a    b  c
0  1  2.0  3
1  1  NaN  4
2  2  1.0  3
3  1  2.0  2
>>> df.groupby(by=["b"]).sum()              # #dropna默认为true,组键中不包含NaN
     a  c
b
1.0  2  3
2.0  2  5
>>> df.groupby(by=["b"], dropna=False).sum()
     a  c
b
1.0  2  3
2.0  2  5
NaN  1  4

也可以是字母

>>> l = [["a", 12, 12], [None, 12.3, 33.], ["b", 12.3, 123], ["a", 1, 1]]
>>> df = pd.DataFrame(l, columns=["a", "b", "c"])
>>> l
[['a', 12, 12], [None, 12.3, 33.0], ['b', 12.3, 123], ['a', 1, 1]]
>>> df
      a     b      c
0     a  12.0   12.0
1  None  12.3   33.0
2     b  12.3  123.0
3     a   1.0    1.0
>>> df.groupby(by="a").sum()
      b      c
a
a  13.0   13.0
b  12.3  123.0
>>> df.groupby(by="a", dropna=False).sum()
        b      c
a
a    13.0   13.0
b    12.3  123.0
NaN  12.3   33.0

Original: https://blog.csdn.net/Ajdidfj/article/details/123174847
Author: 小小白2333
Title: Python函数:groupby()

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/754094/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球