如何计算Pandas中的一系列值?

时间:2016-12-14 23:23:15

标签: python pandas dataframe

让我们在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循环的情况下执行此操作?

2 个答案:

答案 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