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)
分组操作涉及到分离对象、应用函数和组合结果的一些组合。这可以用于对大量数据进行分组,并计算对这些分组的操作。
(上面的看不懂没事,我也看不懂,下面有例子)
在终端运行
>>> 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
来源:小小白23333