目錄
- 一、位移增量df.diff()和位移操作df.shift()
- ①df.shift()
- ②df.diff()
- 二、排名計算df.rank()
- 三、其他常用數學計算
除了對原始資料進行簡單的統計計算外,有時候我們還需要對資料進行一定變化再做計算,pandas自帶一些基礎函式支持這些變化,源Excel檔案maths_pro.xlsx:

一、位移增量df.diff()和位移操作df.shift()
①df.shift()
df.shift(periods=1, freq=None, axis=0)
引數說明:
- periods:int,表示移動的幅度,正數或負數,默認值是1,注意這里移動的都是資料,而索引是不移動的,移動之后沒有對應值的,就賦值為NaN,
- axis:{0, 1, ‘index’, ‘columns’},表示移動的方向,如果是0或者’index’表示上下移動,如果是1或者’columns’,則會左右移動,
- freq,DateOffset, timedelta, or time rule string,可選引數,默認值為None,只適用于時間序列,如果這個引數存在,那么會按照引數值移動時間索引(索引有很多種型別),而資料值沒有發生變化,
df = pd.read_excel(r'C:/Users/asus/Desktop/Python/maths_pro.xlsx')
df

df.shift() # 默認資料向下偏移一個單位
# 設定軸向,向右偏移一個單位,資料型別不匹配,也會設定為NaN值
df.shift(axis=1)

df.shift(periods=-2) # 向上偏移兩個單位

②df.diff()
df.diff(periods=1, axis=0)
做位移差操作(不僅位移而且還做了減操作),用在一個序列性資料中上一個資料和下一個資料之前的差值,增量計算,
df['語文'].diff()
# 等價
df['語文']-df['語文'].shift()
二、排名計算df.rank()
參考文章:https://zhuanlan.zhihu.com/p/87593543(分組排名)
df.rank(axis=0, method='average', numeric_only=None,
na_option='keep', ascending=True, pct=False)
功能:沿著某個軸(0或者1)計算物件的排名
回傳值:以Series或者DataFrame的型別回傳資料的排名(哪個型別呼叫回傳哪個型別)
引數說明:
- axis:設定沿著哪個軸計算排名(0或者1)
- numeric_only:是否僅僅計算數字型的columns,布林值
- na_option:NaN值是否參與排序及如何排序(‘keep’,‘top',’bottom')
- ascending:設定升序排還是降序排,默認為升序True
- pct:是否以排名的百分比顯示排名(當前排名與總數的百分比)
- method:排名方式選擇('average','first','min', 'max','dense')
'average', 跳躍排序,并列取平均排名
'max',跳躍排序,并列取最小排名
'min',跳躍排序,并列取最大排名
'dense',密集排序,并列取排名相同,排名不跳躍
'first',順序排序,相同時,誰在前排名靠前,排名不跳躍
# 對語文成績降序排序,取其中三列
df = df.sort_values(by='語文')[['姓名','語文']]
df

# 5種不同排序方法的比較
df['first'] = df['語文'].rank(method='first')
df['average'] = df['語文'].rank()
df['max'] = df['語文'].rank(method='max')
df['min'] = df['語文'].rank(method='min')
df['dense'] = df['語文'].rank(method='dense')
df['pct'] = df['語文'].rank(pct=True)
df

分組排序:
df = df.sort_values(by=['班級','語文']).reset_index(drop=True)
df['分組排序'] = df.groupby('班級').apply(lambda x:x['語文'].rank(method='dense')).reset_index(drop=True)
df

三、其他常用數學計算
df.eval('result=first + average',inplace=True) # 運算式計算生成新列
# 四舍五入
df.round(2) # 全部數字欄位
df.round({'result': 0, 'pct': 3}) # 指定列
df + 1
df.add() # 加
df.sub() # 減
df.mul() # 乘
df.div() # 除
df.mod() # 模,除后的余數
df.pow() # 指數冪
df.dot(df2) # 矩陣運算
# series特有的函式
s = df['result']
s.nlargest() # 最大的前5個
s.nlargest(15) # 最大的前15個
s.nsmallest() # 最小的前5個
s.nsmallest(15) # 最小的前15個
s.value_counts() # 去重分組統計
s.pct_change() # 與前一個數變化的百分比=(今-前)/前
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279187.html
標籤:其他
上一篇:并發編程之ThreadLocal
下一篇:day-15-初識自定義模塊
