首页 > 解决方案 > 如何在python中使用if语句时迭代pandas groupby对象

问题描述

我有一个看起来像这样的熊猫数据框 df:

| source_num| source_date| text      | category    |location    | source |
+---------+------------+-------------+-------------+------------+--------+---
|  0      | 15/12/2020 | text1       | cat 1       | loc1       |soucrce1|
|  1      | 15/12/2020 | text2       | cat 2       | loc2       |source 2|
|  2      | 15/12/2020 | text3       | cat 3       | loc2       |source 3|
|  3      | 15/12/2020 | text4       | cat 2       | loc3       |source 2|
| ...     | ...        | ...         |             |            |        |

运行 GroupBy 函数时,然后过滤位置中的特定值,它会返回正确的答案。

grouped = df.groupby(['category','source_num',"source","location"], as_index = False).aggregate('sum')

 grouped.loc[grouped["location"] == "loc2"]

我的问题是,我怎样才能执行多个这样的过滤器:

第一个过滤器:

grouped.loc[grouped["location"] == "loc2"]

第二个过滤器:

grouped.loc[grouped["location"] == "loc2" & grouped["category"] .str.contains('cat1')]

第三个过滤器:......

我想我可以通过使用if/else 语句对象对groupby进行迭代来执行上述过滤器?

基于第一个和第二个过滤器过滤后的预期结果:

| source_num| source_date| text      | category    |location    | source |
+---------+------------+-------------+-------------+------------+--------+---
|  0      | 15/12/2020 | text2       | cat 2       | loc2       |soucrce2|
|  1      | 15/12/2020 | text3       | cat 3       | loc2       |source 3|

第一个过滤器完成且第二个过滤器不符合if 语句,因此系统不会进入第二个过滤器。

标签: pythonpandasiterationpandas-groupby

解决方案


如果你想要一个for循环if/statements遍历grouped对象

for name, grouped in grouped:
   if ...

推荐阅读