最近發現周圍的很多小夥伴們都不太樂意使用pandas,轉而投向其他的數據操作庫,身為一個數據工作者,基本上是張口pandas,閉口pandas了,故而寫下此系列以讓更多的小夥伴們愛上pandas。
系列文章說明:
系列名(系列文章序號)——此次系列文章具體解決的需求
平台:
現有一組數據,包含類別列,日期列,以及其他需要進行差異值計算的數值列,如計算蘋果在2022-01-02賣出的數量比2022-01-01賣出的數量多了多少。

需要對每個類型進行分組求值,那麼首先需要將各類型進行分類,然後再對各個類型進行求值就能夠完成需求。
/ 需求處理使用for循環再對類型進行索引取值,再求出差異值這裡不做描述,在pandas里有個函數groupby可以很有效的將每個類型分隔開,返回時將所有結果進行聚合,非常適合該需求

可以看到每個類型的首日和其他日期計算的結果是正確的。

得出的結果與方法一是一樣的。

除上述簡單明了的方法之外,還寫了一個另類的求值方法。
importnumpyasnpimportpandasaspddefget_data_diff(data:pd.DataFrame,group_cols:list,val_cols:list,diff_cols:list,ascending:bool=True):"""自定義獲取數據框的diff:paramdata:pd.DataFrame類型:paramgroup_cols:list,需要聚合的列名:paramval_cols:list,需要排序的列名:paramdiff_cols:list,需要計算diff的列名:paramascending:排序方式,默認`True`,順序排序,接收bool或這個列表里全部為bool的列表:return:返回含diff的數據框"""#為了能返回傳入數據框的原index,將index保存至values中datac=data.reset_index().copy()index_colname=datac.columns[0]#對原數據框進行排序datac.sort_values(group_cols+val_cols,ascending=ascending,inplace=True)#求diffdatac[[f'{i}_diff'foriindiff_cols]]=datac[diff_cols].diff()#主要代碼:分組對組內進行編號rank0=np.hstack(datac.value_counts(group_cols,sort=False).map(lambdax:range(x)).values)#將每個類別的首個值用np.nan代替datac.loc[rank0==0,[f'{i}_diff'foriindiff_cols]]=np.nan#取出原index重置為index值datac.index=datac[index_colname].values#刪除額外生成的index值的列deldatac[index_colname]returndatacget_data_diff(df,['類型'],['日期'],['進貨總量','賣出總量'])使用這個自擬的函數也可以達成目標。
(手動水印:原創CSDN宿者朽命,https://blog.csdn.net/weixin_46281427?spm=1011.2124.3001.5343,公眾號A11Dot派)
/ 總結依賴pandas對行之間進行差異值計算(diff)也是非常方便的,如果需要分類計算只需要在diff前調用groupby方法就能完成需求,在之前的幾篇中有提到過groupby後面接apply,若apply調用的是自定義函數,如匿名函數,會使計算時間延長,為了能較快的得出結果,可儘量使用已定義好的方法。
久旱逢甘露,滴水當湧泉。
於二零二二年三月三十日作