假设我们有以下数据框df
:
df = pd.DataFrame({'food' : ['spam', 'ham', 'eggs', 'ham', 'ham', 'eggs', 'milk'],
'sales' : [10, 15, 12, 5, 14, 3, 8]})
我想转换此数据以显示 food
的 sales
总和,但前提是 sales
更大超过 12。生成的数据透视表如下所示:
未过滤的 df:
food sum(sales)
spam 10
ham 34
eggs 15
milk 8
过滤后的df:
food sum(sales)
ham 34
eggs 15
我可以使用groupby()
,如下所示:
df_new.groupby(['food'])['sales'].agg('sum') > 12
但是,这只给我 bool 值,而不是过滤后的 df。
使用 pd.pivot_table()
函数时是否可以“动态”过滤列? (即没有预过滤 df
)
最佳答案
您可以传递 lambda 函数.loc
,它将过滤数据帧,仅查找与 lambda 函数返回的条件匹配的行:
filtered = df.groupby('food')['sales'].sum().reset_index().loc[lambda x: x['sales'] > 12]
输出:
>>> filtered
food sales
0 eggs 15
1 ham 34
(如果您想知道,lambda 函数是针对整个数据帧执行的,而不是针对每个单独的行,所以是的,它非常高效:)
关于python - *在数据透视期间*过滤 Pandas 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71445150/