pandas入门教程(第四部分):排序、分组和合并
最编程
2024-01-15 12:11:05
...
学习笔记,这个笔记以例子为主。
开发工具:Spyder
文章目录
- pandas排序
- 按行标签进行排序
- 按列标签进行排序
- 按某列值排序
- 举个例子
- pandas分组
- 将数据拆分成组
- 迭代遍历分组
- 获得子分组的细节
- 分组聚合
- 合并
- 合并两个DataFrame
- 使用how参数合并DataFrame
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'])
上一篇: 搞定排序!pandas的sort方法详解