我在python中有一个代码段。它获取前K = 5个值,但如果该值已经出现,则不递增K的值。
例如,给出[1, 3, 3, 5, 5, 6, 1, 4, 8, 9, 34, 66, 124]
和K = 5
时,它应该返回
[1, 3, 3, 5, 5, 6, 1, 4]
如果值重复,则不应增加K的值。这是Python代码。但是我该如何在Pandas Series中做到这一点?
def get_top_K_uniques(K, nums):
ret = []
presense = defaultdict(bool)
counter = 0
for each in nums:
if not presense[each]:
presense[each] = True
counter+=1
ret.append(each)
if counter == K:
return ret
谢谢。
答案 0 :(得分:4)
使用Series.unique()
和Series.isin()
nums = pd.Series([1, 3, 3, 5, 5, 6, 1, 4, 8, 9, 34, 66, 124])
uniq = nums.unique()[:5]
nums[nums.isin(uniq)]
0 1
1 3
2 3
3 5
4 5
5 6
6 1
7 4
答案 1 :(得分:1)
使用category
s[s.astype('category').cat.codes<4]
Out[153]:
0 1
1 3
2 3
3 5
4 5
6 1
7 4
dtype: int64