微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 在多个条件下从数据框中过滤行,得到ValueError

我正在从多个标准上名为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] 举报,一经查实,本站将立刻删除。

相关推荐