pandas基础(part4)--排序/分组/合并

Posted GoatGui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas基础(part4)--排序/分组/合并相关的知识,希望对你有一定的参考价值。

学习笔记,这个笔记以例子为主。
开发工具:Spyder



文章目录



pandas排序

pandas有两种对DataFrame的排序方式,他们分别是按照标签与按实际值排序。

按行标签进行排序

使用​​sort_index()​​方法可以按照行/列标签对DataFrame进行排序。默认情况下,按照升序对行标签进行排序。

  • 语法
import pandas as pd
import numpy as np

# 按照行标进行排序
已排序序列 = 未排序序列.sort_index()

# 控制排序顺序(降序)
已排序序列 = 未排序序列.sort_index(ascending=False)

按列标签进行排序

若设置sort_index()的axis参数值为1,则会按照列标签进行排序。

  • 语法
import pandas as pd
import numpy as np

# 按照列标签进行排序
已排序序列 = 未排序序列.sort_index(axis = 1)

按某列值排序

像索引排序一样,sort_values()是按值排序的方法。该函数接受一个by参数,该参数的参数值为DataFrame的列名。

  • 语法
已排序序列 = 未排序序列.sort_values(by=列名)

举个例子

代码:

import pandas as pd

data = name:[Ada, Tom,Black, Jack, Lee],
age:[9, 19, 12, 15, 30],
weight:[8, 4, 5, 6, 10],
hight:[20, 35, 30, 33, 40]

df = pd.DataFrame(data,
index = [a1, a2, a3, a4, a5])


#按行降序排序
s01 = df.sort_index(ascending=False)
print(s01)
print(-*20)
#按列降序排序
s02 = df.sort_index(axis = 1, ascending=False)
print(s02)
print(-*20)
#按weight列升序排序
s03 = df.sort_values(by = weight)
print(s03)

结果:

age  hight   name  weight
a5 30 40 Lee 10
a4 15 33 Jack 6
a3 12 30 Black 5
a2 19 35 Tom 4
a1 9 20 Ada 8
--------------------
weight name hight age
a1 8 Ada 20 9
a2 4 Tom 35 19
a3 5 Black 30 12
a4 6 Jack 33 15
a5 10 Lee 40 30
--------------------
age hight name weight
a2 19 35 Tom 4
a3 12 30 Black 5
a4 15 33 Jack 6
a1 9 20 Ada 8
a5 30 40 Lee 10

pandas分组

在许多情况下,我们需要将数据分为多个集合,并在每个子集上应用一些函数,来实现我们的需求。

将数据拆分成组

  • 语法
# 将df数据框按照age字段分组
print(df.groupby(age))
# 查看分组结果
print(df.groupby(age).groups)
  • 例子

代码:

import pandas as pd

data = name:[Ada, Tom,Black, Jack, Lee,
Yellow, Blue, Peter, Green, Trump],
age:[9, 9, 10, 10, 10, 10, 8, 9, 7, 8],
weight:[8, 4, 5, 6, 10, 10, 4, 5, 4, 8]

df = pd.DataFrame(data,
index = [a1, a2, a3, a4, a5,
a6, a7, a8, a9, a10])


print(df.groupby(age))
print(df.groupby(age).groups)

结果:

<pandas.core.groupby.DataFrameGroupBy object at 0x000000D589A294A8>
7: Index([a9], dtype=object), 8: Index([a7, a10], dtype=object), 9: Index([a1, a2, a8], dtype=object), 10: Index([a3, a4, a5, a6], dtype=object)

迭代遍历分组

df.groupby()方法可以返回可迭代对象,可以使用for循环遍历。

  • 例子

代码:

import pandas as pd

data = name:[Ada, Tom,Black, Jack, Lee,
Yellow, Blue, Peter, Green, Trump],
age:[9, 9, 10, 10, 10, 10, 8, 9, 7, 8],
weight:[8, 4, 5, 6, 10, 10, 4, 5, 4, 8]

df = pd.DataFrame(data,
index = [a1, a2, a3, a4, a5,
a6, a7, a8, a9, a10])


for age, i in df.groupby(age):
print(age)
print(i)
print(-*10)

结果:

7
age name weight
a9 7 Green 4
----------
8
age name weight
a7 8 Blue 4
a10 8 Trump 8
----------
9
age name weight
a1 9 Ada 8
a2 9 Tom 4
a8 9 Peter 5
----------
10
age name weight
a3 10 Black 5
a4 10 Jack 6
a5 10 Lee 10
a6 10 Yellow 10
----------

获得子分组的细节

语法就不写了,看下面的例子和注释,应该就能懂。

  • 例子

代码:

import pandas as pd

data = name:[Ada, Tom,Black, Jack, Lee,
Yellow, Blue, Peter, Green, Trump],
age:[9, 9, 10, 10, 10, 10, 8, 9, 7, 8],
weight:[8, 4, 5, 6, 10, 10, 4, 5, 4, 8]

df = pd.DataFrame(data,
index = [a1, a2, a3, a4, a5,
a6, a7, a8, a9, a10])

# 将df数据框按照age字段分组
grouped = df.groupby(age)
#查看age=8的分组的细节
print(grouped.get_group(8))

结果:

age   name  weight
a7 8 Blue 4
a10 8 Trump 8

分组聚合

聚合函数为每个分组返回聚合值。当创建了分组(groupby)对象,就可以对每个分组数据执行求和、求标准差等操作。以上是关于pandas基础(part4)--排序/分组/合并的主要内容,如果未能解决你的问题,请参考以下文章

一篇博文教你玩转pandas,轻松应付办公场景(机器学习基础)

数据分析之Pandas合并操作总结

pandas 分组 合并多个元素

pandas 基础操作 更新

《Pandas Cookbook》第02章 DataFrame基本操作

将分组后列的多个值合并为python pandas中的一列