将过滤器添加到pandas数据透视表

时间:2017-04-05 15:47:23

标签: python pandas pivot-table

我想在数据透视表中添加一个过滤条件,如下所示:

(选择v2的值等于' A')

pd.pivot_table(df,index=['v1'],columns=['v2'=='A'],values=['v3'],aggfunc='count')

这可能吗?

4 个答案:

答案 0 :(得分:3)

这是Grr's答案的延伸。

使用他们的建议:

pd.pivot_table(df[df.v3 == some_value], index='v1', columns='A', values='v3', aggfunc='count')

产生错误:

  

" TypeError:pivot_table()获得了参数'值'"的多个值。

我稍作调整,对我有用:

df[df.v3 == some_value].pivot_table(index='v1', columns='A', values='v3', aggfunc='count')

答案 1 :(得分:1)

如果要按列过滤,只需传递一个列名或名称列表即可。例如:

pd.pivot_table(df, index='v1', columns='A', values='v3', aggfunc='count')
pd.pivot_table(df, index='v1', columns=['A', 'B', 'C'], values='v3', aggfunc='count')    

如果您想按值过滤,只需过滤DataFrame即可。例如:

pd.pivot_table(df[df.v3 == some_value], index='v1', columns='A', values='v3', aggfunc='count')

答案 2 :(得分:0)

您也可以在这里使用where条件:

df.where([df.v3 == some_value]).pivot_table(index='v1', columns='A', values='v3', aggfunc='count')

答案 3 :(得分:0)

如果您需要过滤多个值,这可能会很有用:

mask = df['v2'].isin(['A', 'B', 'C'])
table = df[mask].pivot_table(
        values='v3', 
        index=['v1'],
        columns=['v2'], 
        aggfunc='count', 
    )