pandas透视表常用方法

    xiaoxiao2022-07-04  118

    在实际工作中,一些字段较多的数据,存储时往往以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

    最新回复(0)