是否有更多的pythonic方式来写这个?

时间:2016-09-28 16:34:29

标签: python pandas

我希望让它变得更加pythonic。

user_df[-1:]['status_id'].values[0] in {3,5}

我试图user_id.ix[-1:, 'status_id'].isin([3,5]),但没有工作。

有什么建议吗?顶级版本有效,但看起来有点奇怪。

2 个答案:

答案 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.isinnumpy.in1d您将需要花费大量时间来进入C和回到python vs只使用in并设置一个O(1)查找...(在任何一种情况下,时间片在人类时间尺度上都不存在