dataframe 横向拼接_10 pandas DataFrame - 表合并、堆叠、分组

本文介绍了如何使用Pandas DataFrame进行表的合并、堆叠和分组操作。通过实例展示了如何通过学号合并学生信息和成绩数据,使用left_on和right_on指定合并依据,以及如何处理不同列名的情况。此外,还讲解了DataFrame的堆叠功能,以及如何按列(axis=1)和行(axis=0)合并数据。最后,详细阐述了DataFrame的分组功能,包括如何查看分组对象并进行聚合操作如求平均、求和、求最小值和最大值。
摘要由CSDN通过智能技术生成

=== 表合并 ===

场景:两个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)

83cf411f8139

如果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')

83cf411f8139

合成一个索引

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

83cf411f8139

如果学生没有考试,成绩为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

83cf411f8139

1、对列进行分组 groupby

datas = data.groupby('key1')

datas

获得了一个对象

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()

83cf411f8139

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值