Pandas排序与合并

import pandas as pd

排序-sort

ser = pd.Series(list(“CAB”),index=[2,1,3])
ser
2 C
1 A
3 B
dtype: object

ser.sort_index()
1 A
2 C
3 B
dtype: object

ser.sort_index(ascending=False) #降序排列
3 B
2 C
1 A
dtype: object

ser.sort_values()
1 A
3 B
2 C
dtype: object

ser.sort_values(ascending=False)
2 C
3 B
1 A
dtype: object

带None值一直排序在最后

#二维数据
arr = []
arr = [[9,4,3],[3,6,7],[4,5,6]]
df = pd.DataFrame(arr,index=[0,2,1],columns=list(“cab”))
df
c a b
0 9 4 3
2 3 6 7
1 4 5 6

#索引排序
df.sort_index()
c a b
0 9 4 3
1 4 5 6
2 3 6 7

df.sort_index(axis=1)
a b c
0 4 3 9
2 6 7 3
1 5 6 4

df.sort_values(by=‘c’)
c a b
2 3 6 7
1 4 5 6
0 9 4 3

df.sort_values(by=[‘c’,‘a’]) #先排C列,在排A列
c a b
2 3 6 7
1 4 5 6
0 9 4 3

#rank
#排名
df.rank()
c a b
0 3.0 1.0 1.0
2 1.0 3.0 3.0
1 2.0 2.0 2.0

df.rank(method=‘first’) #默认average,还有max,min
c a b
0 3.0 1.0 1.0
2 1.0 3.0 3.0
1 2.0 2.0 2.0

#merge 合并
import numpy as np
df1 = pd.DataFrame({‘stu_no’:[‘s1’,‘s2’,‘s1’,‘s3’,‘s1’,‘s1’,‘s2’,‘s4’,],‘score’:np.random.randint(50,100,size=8)})
df1
stu_no score
0 s1 59
1 s2 78
2 s1 54
3 s3 82
4 s1 82
5 s1 82
6 s2 56
7 s4 56

df2=pd.DataFrame({‘stu_no’:[‘s1’,‘s2’,‘s3’,‘s5’],‘name’:[‘张三’,‘李四’,‘王五’,‘赵六’]})
df2
stu_no name
0 s1 张三
1 s2 李四
2 s3 王五
3 s5 赵六

pd.merge(df1,df2,on=‘stu_no’)
stu_no score name
0 s1 59 张三
1 s1 54 张三
2 s1 82 张三
3 s1 82 张三
4 s2 78 李四
5 s2 56 李四
6 s3 82 王五

pd.merge(df1,df2,on=‘stu_no’,how=‘left’) #以左边的df1为主
stu_no score name
0 s1 59 张三
1 s2 78 李四
2 s1 54 张三
3 s3 82 王五
4 s1 82 张三
5 s1 82 张三
6 s2 56 李四
7 s4 56 NaN

pd.merge(df1,df2,on=‘stu_no’,how=‘right’) #以右边的为主
stu_no score name
0 s1 59.0 张三
1 s1 54.0 张三
2 s1 82.0 张三
3 s1 82.0 张三
4 s2 78.0 李四
5 s2 56.0 李四
6 s3 82.0 王五
7 s5 NaN 赵六

pd.merge(df1,df2,on=‘stu_no’,how=‘outer’) #外连接,两边都出来
stu_no score name
0 s1 59.0 张三
1 s1 54.0 张三
2 s1 82.0 张三
3 s1 82.0 张三
4 s2 78.0 李四
5 s2 56.0 李四
6 s3 82.0 王五
7 s4 56.0 NaN
8 s5 NaN 赵六

concat 数据拼接

df3 = pd.DataFrame(np.arange(1,5).reshape(2,-1))
df4 = pd.DataFrame(np.zeros((2,2)))
pd.concat(df3,df4)
Traceback (most recent call last):
File “<pyshell#38>”, line 1, in
pd.concat(df3,df4)
File “C:\Python36-32\lib\site-packages\pandas\core\reshape\concat.py”, line 225, in concat
copy=copy, sort=sort)
File “C:\Python36-32\lib\site-packages\pandas\core\reshape\concat.py”, line 241, in init
‘"{name}"’.format(name=type(objs).name))
TypeError: first argument must be an iterable of pandas objects, you passed an object of type “DataFrame”

pd.concat([df3,df4])
0 1
0 1.0 2.0
1 3.0 4.0
0 0.0 0.0
1 0.0 0.0

pd.concat([df3,df4],axis=1)
0 1 0 1
0 1 2 0.0 0.0
1 3 4 0.0 0.0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值