我想从数据框中选择值,例如:
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)) & ... ]
这给了我一个空的数据框,是上述逻辑所引起的这个问题,还是不存在具有这些约束的行(在我的实际数据帧中可能性很小)。
干杯
编辑:
好的,所以我已经意识到我的示例有一个根本的区别,实际上是我的df中的样子,如果Vendor_1有一个值,那么Vendor_2,3必须为0,依此类推。所以我使用isin链的逻辑没有道理,请更新示例df。
所以我觉得我需要制作3个子集,然后将其合并?
isin
接受字典:
d = {
'Vendor_1':[1],
'Vendor_2':[20],
'Vendor_3':[500]
}
df.isin(d)
输出:
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)]
输出:
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
必须发生在同一行,你会保留这些行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句