python - *在数据透视期间*过滤 Pandas 数据透视表

标签 python pandas

假设我们有以下数据框df:

df = pd.DataFrame({'food' : ['spam', 'ham', 'eggs', 'ham', 'ham', 'eggs', 'milk'],
                   'sales' : [10, 15, 12, 5, 14, 3, 8]})

我想转换此数据以显示 foodsales 总和,但前提是 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/

相关文章:

python - 下次打开时,如何在 PyQt5 QRadioButton 中将最后选中的项目存储为默认值?

Python netaddr 在命中空 csv 单元格时抛出错误

python - Pandas 数据框中满足特定条件的所有行的平均值

python - 过滤掉超过一定数量 NaN 的行

python - Plotly:如何对 Pandas 数据框使用下拉菜单?

python - 使用 Matplotlib 在对数刻度上绘制直方图

python - 将数值数据更改为分类数据 - Pandas

python - 将列添加到包含跨行的复杂逻辑的 Python pandas 数据框中

python - 在 lxml 中使用 etree 时出错

python - 在 to_csv 命令中选择 index=False 选项时,Excel 不打开 csv 文件