python-3.x 如何计算一个值连续出现的次数?

ndasle7k  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(171)

在一个Pandas Dataframe 中,我试图计算True连续出现了多少次。
(eg.真、真、真表示连续发生2次)
输入:

df = pd.DataFrame({"A": [False, False, True, True, False, True, False, False, False, False, True, True, True, True, False, True, True, True]})

输出:

6

我真的不知道如何解答这个问题。

42fyovps

42fyovps1#

这里有一个方法:

grp = (~df['A']).cumsum()
df['A'].groupby(grp).sum().sub(1).clip(0,).sum()

输出:

6

对False值使用累计和创建所有True值的分组,然后对每组中的True值求和,减去定义该组的第一个False值的1。使用剪辑消除不包含True的组,然后对这些值求和。
下面是另一种通过 Dataframe 列分解步骤的方法。

df['B'] = (~df['A']).cumsum()
df['C'] = df.duplicated(['A', 'B'], keep='first')
df['C'].sum()

输出:

6

详细输出:

A  B      C
0   False  1  False
1   False  2  False
2    True  2  False
3    True  2   True
4   False  3  False
5    True  3  False
6   False  4  False
7   False  5  False
8   False  6  False
9   False  7  False
10   True  7  False
11   True  7   True
12   True  7   True
13   True  7   True
14  False  8  False
15   True  8  False
16   True  8   True
17   True  8   True
fafcakar

fafcakar2#

因为连续的定义是“前面有TrueTrue“,所以一个非常简单的方法是将列与其移位后的自身进行比较,然后比较sum

(df['A']&df['A'].shift(fill_value=False)).sum()

输出:6
中间体:

A  shift  A & shift
0   False  False      False
1   False  False      False
2    True  False      False
3    True   True       True # 1
4   False   True      False
5    True  False      False
6   False   True      False
7   False  False      False
8   False  False      False
9   False  False      False
10   True  False      False
11   True   True       True # 2
12   True   True       True # 3
13   True   True       True # 4
14  False   True      False
15   True  False      False
16   True   True       True # 5
17   True   True       True # 6

相关问题