[英]Select rows where multiple column values are in multiple lists
我想从 dataframe 中获取 select 值,例如:
Vendor_1 Vendor_2 Vendor_3
0 1 0 0
1 0 20 0
2 0 0 300
3 4 0 0
4 0 50 0
5 0 0 500
我想从 Vendor_1、2、3 中保留的值都在一个单独的列表中,即 v_1、v_2、v_3。 例如说 v_1 = [1]、v_2 = [20]、v_3 = [500],这意味着我只想保留这些行。
我试过类似的东西:
df = df[(df['Vendor_1'].isin(v_1)) & (df['Vendor_2'].isin(v_2)) & ... ]
这给了我一个空的 dataframe,这是与上述逻辑有关的问题,还是不存在具有这些约束的行(在我的真实数据框中极不可能)。
干杯
编辑:
好的,所以我已经意识到与我的示例的根本区别以及我的 df 中的实际情况,如果 Vendor_1 有值,则 Vendor_2,3 必须为 0,等等。所以我使用 isin 链的逻辑没有意义正确,我将更新示例 df。
所以我觉得我需要制作 3 个子集,然后合并它们或其他什么?
isin
接受字典:
d = {
'Vendor_1':[1],
'Vendor_2':[20],
'Vendor_3':[500]
}
df.isin(d)
Output:
Vendor_1 Vendor_2 Vendor_3
0 True False False
1 False True False
2 False False False
3 False False False
4 False False False
5 False False True
然后根据您的逻辑,您要检查any
或all
:
df[df.isin(d).any(1)]
Output:
Vendor_1 Vendor_2 Vendor_3
0 1 0 0
1 0 20 0
5 0 0 500
但是,如果您在这种情况下使用all
,例如,您要求Vendor_1=1
、 Vendor_2=20
和Vendor_3=500
必须发生在相同的行上,并且您将保留这些行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.