向 Pandas 数据透视表添加过滤器

pro*_*ter 5 python pivot-table pandas

我想向数据透视表添加过滤条件,如下所示:

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

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

那可能吗?

Grr*_*Grr 7

如果您想按列过滤,您可以只传递单个列名称或名称列表。例如:

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')    
Run Code Online (Sandbox Code Playgroud)

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

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


Jos*_*jua 7

这是Grr答案的延伸。

使用他们的建议:

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

产生错误:

“类型错误:pivot_table() 为参数‘值’获得了多个值”

我做了一个轻微的调整,它对我有用:

df[df.v3 == some_value].pivot_table(index='v1', columns='A', values='v3', aggfunc='count')
Run Code Online (Sandbox Code Playgroud)

添加多个过滤器:使用& , | 运算符用一组 () 来指定优先级。使用and , or 会导致错误。

df[(df.v3 == some_value) & (df.v4 == some_value)].pivot_table(index='v1', columns='A', values='v3', aggfunc='count')
Run Code Online (Sandbox Code Playgroud)