【发布时间】:2020-12-18 06:11:06
【问题描述】:
我有一个看起来像这样的熊猫数据框 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 函数时 然后过滤 location 中的特定值,它会返回正确的答案。
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 语句,因此系统不会进入第二个过滤器。
【问题讨论】:
-
请阅读下面链接中的文档,并说明您已经尝试过的内容以及您目前所处的位置。 pandas.pydata.org/pandas-docs/stable/user_guide/…
-
@skuzzy 不,我希望 like for 语句遍历 groupby 的结果,然后根据几个 if /else 语句,最后一个结果将显示最终结果。
-
@skuzzy 我不明白索引有什么?直到现在我能够获得 groupby 对象而不是执行第一个过滤器..我想要的是能够执行多个过滤器并将最终结果作为一个数据帧返回....也许我可以执行每个过滤器然后合并所有一个数据框中每个过滤器的结果可以这样做吗??
-
您不需要 for 循环迭代来应用条件测试 - 一个或多个。
groupby的结果也在一个有效的数据框中,并遵循与任何其他相同的索引规则。 pandas dataframe 请参阅我的 cmets 中的链接,了解布尔索引如何与一个或多个条件子句一起使用。 Pandas 强烈建议不要对数据框进行迭代 - pandas.pydata.org/pandas-docs/stable/user_guide/…
标签: python pandas iteration pandas-groupby