我想在数据透视表中添加一个过滤条件,如下所示:
(选择v2的值等于' A')
pd.pivot_table(df,index=['v1'],columns=['v2'=='A'],values=['v3'],aggfunc='count')
这可能吗?
答案 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',
)