我希望让它变得更加pythonic。
user_df[-1:]['status_id'].values[0] in {3,5}
我试图user_id.ix[-1:, 'status_id'].isin([3,5])
,但没有工作。
有什么建议吗?顶级版本有效,但看起来有点奇怪。
答案 0 :(得分:4)
您可以尝试:
user_id['status_id'].iloc[-1:].isin([3,5])
样品:
user_id = pd.DataFrame({'status_id':[1,2,3]})
print (user_id)
status_id
0 1
1 2
2 3
#iloc without : [-1] return scalar
print (user_id['status_id'].iloc[-1] in set({3,5}))
True
#iloc with : [-1:] return vector - Series
print (user_id['status_id'].iloc[-1:].isin([3,5]))
2 True
Name: status_id, dtype: bool
答案 1 :(得分:2)
isin
可能会稍快一点(你需要检查的速度越快,你会注意到的速度越快......但即使对于大型套装也不会有太大差异......(我怀疑)在这个例子中它的任何速度都快......它可能稍微慢了一些......但是val in set()
相当于pythonic (实际上远比pd.isin
更多)
您正在针对set
测试单一值 ...使用pandas.isin
或numpy.in1d
您将需要花费大量时间来进入C和回到python vs只使用in
并设置一个O(1)
查找...(在任何一种情况下,时间片在人类时间尺度上都不存在 )