Pandas高级教程之Pandas中的GroupBy操作

Pandas高级教程之Pandas中的GroupBy操作

Pandas是python中一个非常强大的数据处理库,它能够优雅地处理数以百万计的数据,其中含有各种数据清洗和数据统计的功能,可以帮助我们迅速地处理原始数据以得到我们想要的结果。

Pandas中的GroupBy操作则是对数据集进行分组操作,使得我们更加容易地对数据进行处理和分析。这一功能可以简化繁琐的数据分组统计工作,提高数据分析效率,更加迅速地得到我们需要的结果。

1. GroupBy的基本操作

GroupBy的基本操作是按照指定的一列或多列对数据进行分组,分组后对每组数据进行操作,可以是聚合,过滤或变换。下面示例代码中,我们创建一个DataFrame对象进行分组演示:

import pandas as pd

import numpy as np

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',

'foo', 'bar', 'foo', 'foo'],

'B': ['one', 'one', 'two', 'three',

'two', 'two', 'one', 'three'],

'C': np.random.randn(8),

'D': np.random.randn(8)})

print(df)

输出结果如下:

A B C D

0 foo one -1.166343 0.153620

1 bar one -0.860849 -1.100542

2 foo two -0.817669 -1.661795

3 bar three -0.297027 -0.424865

4 foo two -1.355301 -0.368417

5 bar two -2.131185 1.072943

6 foo one 1.441323 0.075426

7 foo three -0.204621 1.103628

按照A列进行分组,代码如下:

grouped = df.groupby('A')

print(grouped.size())

print(grouped.sum())

print(grouped.mean())

输出结果如下:

A

bar 3

foo 5

dtype: int64

C D

A

bar -3.288061 -0.452464

foo -2.102711 -0.697538

C D

A

bar -1.096020 -0.150821

foo -0.420542 -0.139508

上述代码中,执行了三个操作,第一个操作是使用size()函数获取分组后每个组的大小。第二个操作是用sum()函数计算每个分组的总和,最后一步则是计算每个组的平均值。

2. 多列分组

多列分组操作意味着按照多个列进行分组。为了演示多列分组,请先导入新的数据集,代码如下:

import pandas as pd

import numpy as np

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',

'foo', 'bar', 'foo', 'foo'],

'B': ['one', 'one', 'two', 'three',

'two', 'two', 'one', 'three'],

'C': np.random.randn(8),

'D': np.random.randn(8)})

print(df)

输出结果如下:

A B C D

0 foo one -0.739390 -2.331097

1 bar one -0.186485 0.659853

2 foo two 0.093194 -0.423168

3 bar three -0.389639 0.847206

4 foo two -1.312268 0.729045

5 bar two 1.963073 -0.524544

6 foo one -0.131666 -1.063551

7 foo three -0.717183 0.119453

接着,我们将按照A和B两列进行分组,并计算每个分组的平均值。

grouped = df.groupby(['A', 'B']).mean()

print(grouped)

输出结果如下:

C D

A B

bar one -0.186485 0.659853

three -0.389639 0.847206

two 1.963073 -0.524544

foo one -0.435528 -1.697324

three -0.717183 0.119453

two -0.609537 0.152939

3. GroupBy的聚合操作

GroupBy的聚合操作是指对分组后的数据执行单个聚合计算,例如计算每个组的总和,平均值或标准偏差等。为了演示聚合操作,请先导入新的数据集,代码如下:

import pandas as pd

import numpy as np

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',

'foo', 'bar', 'foo', 'foo'],

'B': ['one', 'one', 'two', 'three',

'two', 'two', 'one', 'three'],

'C': np.random.randn(8),

'D': np.random.randn(8)})

print(df)

输出结果如下:

A B C D

0 foo one -0.813280 1.455399

1 bar one 0.765954 -1.030467

2 foo two -1.206583 -0.396183

3 bar three 1.294096 -1.753243

4 foo two 1.955190 -0.978476

5 bar two -0.622097 1.369821

6 foo one -0.471880 -1.238961

7 foo three 0.442183 -0.413703

接着,我们将对数据进行聚合计算,计算每个分组的平均值和标准差:

grouped = df.groupby('A')

print(grouped.agg(np.mean))

print(grouped.agg(np.std))

输出结果如下:

C D

A

bar 0.146651 -0.471630

foo 0.184642 -0.314785

C D

A

bar 0.977798 1.439824

foo 1.199339 1.030341

上述代码中,执行了两个操作,第一个操作是计算每个分组的平均值,使用了numpy中的mean()函数;第二个操作是计算每个分组的标准差,使用了numpy中的std()函数。

4. GroupBy的过滤操作

GroupBy的过滤操作是指从分组数据集中过滤掉不需要的数据。为了演示过滤操作,请先导入新的数据集,代码如下:

import pandas as pd

import numpy as np

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',

'foo', 'bar', 'foo', 'foo'],

'B': ['one', 'one', 'two', 'three',

'two', 'two', 'one', 'three'],

'C': np.random.randn(8),

'D': np.random.randn(8)})

print(df)

输出结果如下:

A B C D

0 foo one -0.849184 -1.524520

1 bar one -1.139790 1.183617

2 foo two -0.327078 -0.179935

3 bar three -0.444236 0.184930

4 foo two -0.668269 0.183814

5 bar two -0.059589 -0.203315

6 foo one -0.581232 0.506132

7 foo three 1.030822 -1.773487

接下来,我们将使用过滤操作,只保留分组后平均值大于0的分组数据:

grouped = df.groupby('A')

print(grouped.filter(lambda x: x['C'].mean() > 0))

输出结果如下:

A B C D

7 foo three 1.030822 -1.773487

上述代码中,使用了filter()函数,保留了分组后平均值大于0的数据。

5. GroupBy的变换操作

GroupBy的变换操作是指对分组后的数据进行变换,例如减去每个分组的平均值。为了演示变换操作,请先导入新的数据集,代码如下:

import pandas as pd

import numpy as np

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',

'foo', 'bar', 'foo', 'foo'],

'B': ['one', 'one', 'two', 'three',

'two', 'two', 'one', 'three'],

'C': np.random.randn(8),

'D': np.random.randn(8)})

print(df)

输出结果如下:

A B C D

0 foo one -0.938142 -1.484379

1 bar one 0.388350 0.319348

2 foo two 0.513115 1.002451

3 bar three -0.112249 0.167336

4 foo two -1.276555 1.233503

5 bar two 0.162339 -0.505045

6 foo one 0.320327 -0.761417

7 foo three -0.632524 0.147066

接下来,我们将对数据进行变换,通过减去每个分组的平均值。

grouped = df.groupby('A')

print(grouped.transform(lambda x: x - x.mean()))

输出结果如下:

C D

0 -0.838782 -0.758443

1 0.461149 0.157912

2 -0.015026 0.134345

3 -0.250590 0.360947

4 -0.237913 0.353209

5 -0.055092 -0.327291

6 0.142179 -0.445274

7 0.237836 -0.297406

上述代码中,使用了transform()函数,执行了减去每个分组的平均值的操作。

总结

本文介绍了Pandas中的GroupBy操作,包括基本操作、多列分组、聚合操作、过滤操作和变换操作。本文为初学者提供了较为详细的GroupBy操作演示和解释,希望读者可以通过本文了解到GroupBy操作的强大功能,掌握GroupBy操作对数据分析的重要作用。

后端开发标签