我正在从多个标准上名为join的数据帧中过滤我的行:
joined[(joined.gvkey_x==gvkey) & (year-3<=joined.year_y<=year )]
我想要数据帧中满足给定条件的所有行.
我发回了这个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
我正在阅读this answer,其中声明我应该使用.any()/ .all(),但这并不完全清楚.
有人可以向我解释我应该如何应用多个条件,以及在我的操作(&)中a.any()或a.all()的用途和用途是什么.
解决方法:
你可以使用查询
joined.query('gvkey_x == @gvkey & @year - 3 <= year_y <= @year')
演示
year = 2002
gvkey = 12345
joined = pd.DataFrame(dict(
gvkey_x=[12343] * 6 + [12345] * 6 + [12346] * 6,
year_y=list(range(2000, 2006)) * 3
))
print(joined)
gvkey_x year_y
0 12343 2000
1 12343 2001
2 12343 2002
3 12343 2003
4 12343 2004
5 12343 2005
6 12345 2000
7 12345 2001
8 12345 2002
9 12345 2003
10 12345 2004
11 12345 2005
12 12346 2000
13 12346 2001
14 12346 2002
15 12346 2003
16 12346 2004
17 12346 2005
print(joined.query('gvkey_x == @gvkey & @year - 3 <= year_y <= @year'))
gvkey_x year_y
6 12345 2000
7 12345 2001
8 12345 2002
你得到错误的原因是因为(第3年< = joined.year_y< =年)
大熊猫需要分别评估每个比较.
正如@Psidom在评论中建议的那样:
(joined.year_y >= year-3) & (joined.year_y <= year)
会解决它.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。