10 pandas DataFrame - 表合并、堆叠、分组

简介: === 表合并 ===场景:两个dataFrame,一个是学生的[学号,姓名,班级] [学号,成绩] ,通过学号将两组信息合并到一起print('\n---- 学生信息 ---')students = pd.

=== 表合并 ===

场景:两个dataFrame,一个是学生的[学号,姓名,班级] [学号,成绩] ,通过学号将两组信息合并到一起
print('\n---- 学生信息 ---')
students = pd.read_csv('stu_data.csv',encoding='gb2312')
print(students)

print('\n---- 学生成绩信息 ---')
scores = pd.read_csv('score_data.csv',encoding='gb2312')
print(scores)

原数据:

---- 学生信息 ---
   学号    姓名 性别  年龄
0   1   Tom  M  15
1   2  Wang  F  17
2   3   Qin  M  16

---- 学生成绩信息 ---
   学号  课程  分数
0   1  语文  82
1   1  数学  92
2   1  英语  68
3   2  语文  75
4   2  数学  88
5   2  英语  54
6   3  语文  90
7   3  数学  95
8   3  英语  89

合成两张表

因为两张表里都有一个学号字段,所以会默认拿学号作合并

pd.merge(students,scores)
img_3a21ee87ca8422814e20773c13af9116.png

如果stu_data中的学号改为学号1,score_data中的学号改为学号2

直接合并会报错,没有公共的列无法合并
使用 left_on='学号1',right_on='学号2' 进行合并

students = pd.read_csv('stu_data.csv',encoding='gb2312')
scores = pd.read_csv('score_data.csv',encoding='gb2312')
pd.merge(students,scores,left_on='学号1',right_on='学号2')
img_cc7f3561aae57b21936efb49197be4ae.png

合成一个索引

print('\n---- 学生信息 ---')
students=pd.read_csv('stu_data.csv',encoding='gb2312',index_col=0)
print(students)

print('\n---- 学生成绩信息 ---')
scores=pd.read_csv('score_data.csv',encoding='gb2312',index_col=0)
print(scores)

将students和scores的索引都设置为学号 index_col=0
merger的时候left_index=True,right_index=True 就可以找到连接的索引了

stu_scores=pd.merge(students,scores,left_index=True,right_index=True)
stu_scores
img_a0a7af36bf7d10bb5ab76061ae304198.png

如果学生没有考试,成绩为NaN,会连接不到,使用how='outer'即可列出这些数据
how: outer并集,inner交集,left以左边为基础, right以右表为基础

stu_scores=pd.merge(students,scores,left_index=True,right_index=True,how='outer')

=== 堆叠 ===

场景:两组数据横向、纵向合并到一起
df1 = pd.DataFrame({'key':['a','a','b','b'],'data1':range(4)})
print(df1)
df2 = pd.DataFrame({'key':['b','b','c','c'],'data2':range(4)})
print(df2)

print(pd.concat([df1,df2],axis=1))
print(pd.concat([df1,df2],axis=0,join='outer'))
   data1 key
0      0   a
1      1   a
2      2   b
3      3   b
   data2 key
0      0   b
1      1   b
2      2   c
3      3   c
   data1 key  data2 key
0      0   a      0   b
1      1   a      1   b
2      2   b      2   c
3      3   b      3   c
   data1  data2 key
0    0.0    NaN   a
1    1.0    NaN   a
2    2.0    NaN   b
3    3.0    NaN   b
0    NaN    0.0   b
1    NaN    1.0   b
2    NaN    2.0   c
3    NaN    3.0   c

=== 分组 ===

原数据:

data = pd.DataFrame({
        'data1':np.random.randint(1,9,5),
        'data2':np.random.randint(1,9,5),
        'key1':list('aabba'),
        'key2':['one','one','two','one','two']
    })
data
img_fa1344ed912d8308e808ebb3b4eac199.png

1、对列进行分组 groupby

datas = data.groupby('key1')
datas

获得了一个对象
<pandas.core.groupby.DataFrameGroupBy object at 0x0000021BF73012E8>

2、查看分组对象

分成了两个个元组,将相同key1的一组分到一起

for i in datas:
    print(i)
('a',    data1  data2 key1 key2
 0       7       4     a   one
 1       3       5     a   one
 4       5       4     a   two)
('b',    data1  data2 key1 key2
 2       4       5     b   two
 3       3       3     b   one)

3、通过key1进行分组,分别进行聚合操作

datas.mean()
datas.sum()
datas.min()
datas.max()
img_8d83812a2fc9970f5fed5b6c28375180.png
相关文章
|
15天前
|
SQL 索引 Python
Pandas中DataFrame合并的几种方法
Pandas中DataFrame合并的几种方法
43 0
|
2月前
|
Python
掌握pandas中的时序数据分组运算
掌握pandas中的时序数据分组运算
|
2月前
|
索引 Python
Pandas学习笔记之Dataframe
Pandas学习笔记之Dataframe
|
2月前
|
数据挖掘 大数据 数据处理
数据分析师的秘密武器:精通Pandas DataFrame合并与连接技巧
【8月更文挑战第22天】在数据分析中,Pandas库的DataFrame提供高效的数据合并与连接功能。本文通过实例展示如何按员工ID合并基本信息与薪资信息,并介绍如何基于多列(如员工ID与部门ID)进行更复杂的连接操作。通过调整`merge`函数的`how`参数(如&#39;inner&#39;、&#39;outer&#39;等),可实现不同类型的连接。此外,还介绍了使用`join`方法根据索引快速连接数据,这对于处理大数据集尤其有用。掌握这些技巧能显著提升数据分析的能力。
55 1
|
2月前
【Pandas+Python】初始化一个全零的Dataframe
初始化一个100*3的0矩阵,变为Dataframe类型,并为每列赋值一个属性。
28 2
|
2月前
|
SQL 数据采集 JSON
Pandas 使用教程 Series、DataFrame
Pandas 使用教程 Series、DataFrame
41 0
|
2月前
|
Python
[pandas]从多个文件中构建dataframe
[pandas]从多个文件中构建dataframe
|
2月前
|
索引 Python
【Pandas】Pandas Dataframe 常用用法
Pandas DataFrame的常用操作示例,包括筛选数据、索引操作、合并DataFrame、设置和排序索引、文本处理、列重命名、处理缺失值、排序以及删除满足特定条件的行等技巧。
46 0
|
15天前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
35 0
|
4天前
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
30 3