在實際工作中,一些字段較多的資料,存儲時往往以params-values的形式存儲。如下所示:
test = pd.DataFrame([['a','var1',1],['a','var2',2],['b','var1',1],['b','var2',2]],columns=['id','params','values'])
test
一個id對應多行。然而在使用資料的過程中,往往希望一個id對應一行。
下面的操作可以幫助我們迅速處理成我們需要的形式,而避免寫太長的sql。
p = pd.pivot_table(test,index=['id'],columns=['params'],values=['values'],aggfunc=np.max)
p
還需要做下處理,轉換成正常的Dataframe。
我們可以看下p.columns。
可以看到columns,多層級結構
p.columns.levels[1]
Index([‘var1’, ‘var2’], dtype=‘object’, name=‘params’)
是以我們可以對columns重命名
p.columns = list(p.columns.levels[1])
p
p=p.reset_index()
p
重置索引,就可以得到我們想要的。
另外,也可以用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
我們來統計每個id下,不同params下的頻數。
c = pd.pivot_table(test[['id','params']],index=['id'],columns=['params'],aggfunc=len,fill_value=0,margins=True,)
c