Python學習筆記:pandas之transform


一、介紹

利用 transform 可以高效地匯總數據,直白的說:增加一列匯總列。

一般情況下,transformgroupby 組合使用。

使用語法:

Series.transform(func, axis=0, **kwargs)

二、實操

  • 基礎用法
import pandas as pd
import numpy as np

df = pd.DataFrame({'A':range(3),
                   'B':range(1,4)})
df
'''
   A  B
0  0  1
1  1  2
2  2  3
'''

# 整體 +1
df.transform(lambda x: x+1)

s = pd.Series(range(3))
s.transform([np.sqrt, np.exp])
'''
       sqrt       exp
0  0.000000  1.000000
1  1.000000  2.718282
2  1.414214  7.389056
'''
  • 分組變換

inputsplitapply(sum)combine

df = pd.DataFrame({
    "Date": [
        "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05",
        "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05"],
    "Data": [5, 8, 6, 1, 50, 100, 60, 120],
})

df['sum'] = df.groupby('Date')['Data'].transform(sum)
df['size'] = df.groupby('Date')['Data'].transform(len)
df
'''
         Date  Data  sum  size
0  2015-05-08     5   55     2
1  2015-05-07     8  108     2
2  2015-05-06     6   66     2
3  2015-05-05     1  121     2
4  2015-05-08    50   55     2
5  2015-05-07   100  108     2
6  2015-05-06    60   66     2
7  2015-05-05   120  121     2
'''

不使用 transform 方法進行變換。

temp = df.groupby('Date')['Data'].sum().rename('Total').reset_index()

df_2 = pd.merge(df, temp, how='left')
df_2['percent'] = df_2['Data']/df_2['Total']
'''
         Date  Data  sum  size  Total   percent
0  2015-05-08     5   55     2     55  0.090909
1  2015-05-07     8  108     2    108  0.074074
2  2015-05-06     6   66     2     66  0.090909
3  2015-05-05     1  121     2    121  0.008264
4  2015-05-08    50   55     2     55  0.909091
5  2015-05-07   100  108     2    108  0.925926
6  2015-05-06    60   66     2     66  0.909091
7  2015-05-05   120  121     2    121  0.991736
'''

三、apply 和 transform 結合對比

在與 apply() 一起使用時,transform 需要進行去重操作,一般是通過指定一或多個列完成。

此外,匿名函數永遠不是一個很好的辦法,在進行簡單計算時,無論是使用 transfromagg 還是 apply,都要盡可能使用自帶方法!!!

apply 方法可以結合 joblib 多線程、多進程模塊構造相應的函數執行計算,加快計算速度。

參考鏈接:pandas.Series.transform

參考鏈接:新手向——理解Pandas的Transform

參考鏈接:pandas:apply和transform方法的性能比較


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM