Python数据处理疑问:分组与筛选顺序调换为何报错?
问题原因及解决方法
为什么调换顺序会报错?
你写的data.groupby("source")[data.country=="country_2"]里,groupby("source")之后的方括号[]是用来选择列的,而data.country=="country_2"返回的是一个由True/False组成的布尔Series。pandas会把这些布尔值当成列名去查找,但你的数据集里根本没有叫False或True的列,所以直接抛出KeyError。
反观正确写法data[data.country=="country_2"].groupby("source").count(),是先通过布尔索引筛选出所有country等于country_2的行,再对筛选后的结果按source分组统计,逻辑完全通顺。
如果一定要先分组再筛选,该怎么写?
如果想先按source分组,再在每个组里筛选country=="country_2"的行,可以用groupby后的apply方法:
data.groupby("source").apply(lambda group: group[group.country == "country_2"]).count()
或者用filter方法(保留所有包含符合条件行的组的全部数据再统计):
data.groupby("source").filter(lambda group: (group.country == "country_2").any()).count()
注意这两种写法和你最初的正确写法逻辑略有不同,按需选择即可。
内容的提问来源于stack exchange,提问作者butBlue
相关产品推荐
相关产品推荐

