天天看點

pandas透視表常用方法

在實際工作中,一些字段較多的資料,存儲時往往以params-values的形式存儲。如下所示:

test = pd.DataFrame([['a','var1',1],['a','var2',2],['b','var1',1],['b','var2',2]],columns=['id','params','values'])
test
           
pandas透視表常用方法

一個id對應多行。然而在使用資料的過程中,往往希望一個id對應一行。

下面的操作可以幫助我們迅速處理成我們需要的形式,而避免寫太長的sql。

p = pd.pivot_table(test,index=['id'],columns=['params'],values=['values'],aggfunc=np.max)
p
           
pandas透視表常用方法

還需要做下處理,轉換成正常的Dataframe。

我們可以看下p.columns。

pandas透視表常用方法

可以看到columns,多層級結構

p.columns.levels[1]
           

Index([‘var1’, ‘var2’], dtype=‘object’, name=‘params’)

是以我們可以對columns重命名

p.columns = list(p.columns.levels[1])
p
           
pandas透視表常用方法
p=p.reset_index()
p
           
pandas透視表常用方法

重置索引,就可以得到我們想要的。

另外,也可以用pivot_table透視表實作crosstable的功能。

test = pd.DataFrame([['a','var1',1],['a','var2',2],['b','var1',1],['b','var2',2],['b','var2',2]],columns=['id','params','values'])
test
           
pandas透視表常用方法

我們來統計每個id下,不同params下的頻數。

c = pd.pivot_table(test[['id','params']],index=['id'],columns=['params'],aggfunc=len,fill_value=0,margins=True,)
c
           
pandas透視表常用方法