如何解决当我添加另一层按位运算时,我的过滤器停止工作
- 此SO question中的数据可用。
毫无疑问,解决方案非常简单,但是我很困惑。当我将以下过滤器应用于数据框时:
def filt(g):
return ((len(g)>=9) | (len(g)<=3))
milk_countries_exports_0401_filt=milk_countries_exports_0401.groupby(['Commodity','Partner']).filter(filt)
milk_countries_exports_0401_filt.groupby(['Commodity','Partner'])[['Trade Value (US$)']].aggregate([len,sum]).head(5)
我得到以下输出:
如果len(在这种情况下,意味着要交易的月份数)明显小于或等于3,或者大于或等于9,则为
但是,一旦我使过滤器变得更加复杂:
def filt(g):
return ((len(g)>=9 & g['Trade Value (US$)'].max()<2500) | (len(g)<=3 & g['Trade Value (US$)'].min()>250000))
milk_countries_exports_0401_filt=milk_countries_exports_0401.groupby(['Commodity',sum]).head(5)
旨在返回以下国家或地区的数据框:a)交易至少9个月,每月交易少于2500美元,或b)交易最多3个月,每月交易至少250000美元。就像前面一样,输出应该包含不超过3或不小于9的len值,但是我得到了:
仅显示一个示例,因为我也仅排在前5行,但是关于len的过滤器部分似乎已被忽略,如您从英属维尔京群岛的6 len中可以看到的那样。 如何使它按预期工作?
解决方法
按位比较运算符&
和|
的绑定比其他运算符更紧密。
将比较内容括在括号中。
def filt(g):
case1 = (len(g) >= 9) & (g['Trade Value (US$)'].max() < 2500)
case2 = (len(g) <= 3) & (g['Trade Value (US$)'].min() > 250000)
return case1 | case2
df_filt = df.groupby(['Commodity','Partner']).filter(filt)
df_filt.groupby(['Commodity','Partner'])[['Trade Value (US$)']].aggregate([len,sum])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。