pandas的DataFrame極大地簡化了數據分析過程中一些煩瑣操作,它是一個表格型的數據結構, 每一列代表一個變量,而每一行則是一條記錄。簡答地說,DataFrame是共享同一個index 的Series的集合。
DataFrame數據的排序分為三類:
對於索引排序,涉及到對行的索引和對列的索引進行升序或者降序排序函數df.sort_index(axis= , ascending= , inplace=),需要特別注意這三個參數。axis表示對行的索引排序,還是對列的索引進行排序;ascending表示升序,還是降序操作。
dates = ['2022-01-01','2022-09-02','2022-01-03','2022-01-04','2022-01-05','2022-01-06']
dates=pd.to_datetime(dates)
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
#默認按照行的索引進行升序排序
df.sort_index()
Out[48]:
A B C D
2022-01-01 0.096360 0.390240 -1.272864 -0.248937
2022-01-03 2.085985 -1.026902 0.089471 0.049253
2022-01-04 0.459439 1.356780 -0.327171 0.735977
2022-01-05 0.625936 -1.434436 0.289198 -1.308614
2022-01-06 0.306561 -0.718824 -1.639355 -0.287135
2022-09-02 0.043364 2.206094 0.853971 2.067719
#按照列的索引進行降序排序
df.sort_index(axis=1,ascending=False)
Out[49]:
D C B A
2022-01-01 -0.248937 -1.272864 0.390240 0.096360
2022-09-02 2.067719 0.853971 2.206094 0.043364
2022-01-03 0.049253 0.089471 -1.026902 2.085985
2022-01-04 0.735977 -0.327171 1.356780 0.459439
2022-01-05 -1.308614 0.289198 -1.434436 0.625936
2022-01-06 -0.287135 -1.639355 -0.718824 0.306561
對於值排名,使用函數df.sort_values(by= , axix=,ascending= , inplace=,na_postion=)。
注意:axis=0表示按照行進行排名,axis=1表示按照列進行排名,默認0;ascending=True表示升序,ascending=False表示降序,默認True.na_position參數用於設定缺失值的顯示位置,first表示缺失值顯示在最前面;last表示缺失值顯示在最後面
df = pd.DataFrame(np.random.randn(6,4),index=['a','b','c','d','e','f'],columns=list('ABCD'))
#對單列的值進行降序排序,其他列不參與排序。
df.sort_values(by='A',axis=0,ascending=False,inplace=True)
#對單行的值進行降序排序,其他行不參與排序
f.sort_values(by='b',axis=1,ascending=False,inplace=True)
#對多列的值進行降序排序
df.sort_values(by='A',axis=0,ascending=False,inplace=True)
df.loc['g','A']=1
df.sort_values(by='A',axis=0,ascending=False,inplace=True,na_position="first")
對於值排名,使用函數rank(axis= , ascending= ,method,na_position=),。
注意:axis=0表示按照行進行排名,axis=1表示按照列進行排名,默認0;ascending=True表示升序,ascending=False表示降序,默認True.method='average'是表示值相等時,都取平均排序作為排名,method='min'表示值相等時,都取最小排序作為排名,method='max'表示值相等時,都取最大排序作為排名,method='first'表示值相等時,自然位置前者排前面,method='dense'表示值相等時,都取最小排序作為排名,且後續排名僅跟+1。
df['A']
Out[74]:
a 0.0
b 1.0
c 1.0
d 1.0
e 1.0
f 1.0
g 3.0
h 3.0
df['A'].rank()
Out[75]:
a 1.0
b 4.0
c 4.0
d 4.0
e 4.0
f 4.0
g 7.5
h 7.5
df['A'].rank(method='first')
Out[76]:
a 1.0
b 2.0
c 3.0
d 4.0
e 5.0
f 6.0
g 7.0
h 8.0
df['A'].rank(method='average')
Out[77]:
a 1.0
b 4.0
c 4.0
d 4.0
e 4.0
f 4.0
g 7.5
h 7.5
df['A'].rank(method='min')
Out[78]:
a 1.0
b 2.0
c 2.0
d 2.0
e 2.0
f 2.0
g 7.0
h 7.0
df['A'].rank(method='max')
Out[79]:
a 1.0
b 6.0
c 6.0
d 6.0
e 6.0
f 6.0
g 8.0
h 8.0
df['A'].rank(method='dense')
Out[80]:
a 1.0
b 2.0
c 2.0
d 2.0
e 2.0
f 2.0
g 3.0
h 3.0