让我们在Pandas中说我有这样的数据框:
index value
1 1
2 0
3 1
4 1
5 0
6 1
我想计算一个特定的值序列发生了多少次,比如在1之后0发生了多少次(即发生了多少次[1,0],并且在上面的例子中#39) ; s两次),或多少次[1,0,1]发生(再次,两次)。
是否有一种方法可以在不使用for
循环的情况下执行此操作?
答案 0 :(得分:2)
广义解决方案
def tuplify(s, k):
return list(zip(*[s.values[i:].tolist() for i in range(k)]))
s = pd.Series([1, 0, 1, 1, 0, 1])
pd.value_counts(tuplify(s, 3))
(1, 0, 1) 2
(1, 1, 0) 1
(0, 1, 1) 1
dtype: int64
你可以将它赋给变量并获得你想要的元组。
counts = pd.value_counts(tuplify(s, 3))
counts[(1, 0, 1)]
2
细分
tuplify(s, 3)
[(1, 0, 1), (0, 1, 1), (1, 1, 0), (1, 0, 1)]
元组是可以清除的,因此可以计算pd.value_counts
如上所示。
答案 1 :(得分:0)
如果不将pandas系列转换为字符串,我不知道如何做到这一点;我希望看到一个直接在该系列上运行的解决方案。
以下内容将系列转换为字符串,然后使用count函数。
import pandas as pd
import re
s = pd.Series([1,0,1,1,0,1])
# convert to string and remove all whitespace
re.sub('\s+', '', s.to_string(index=False)).count('101')
# 2