numpy 如何计算滑动窗口中的唯一值?

rpppsulh  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(177)

假设我们有一个DataFrame,它只包含抛硬币N次的结果。

outcome
0     H
1     T
2     H
3     H
4     H
5     T
6     H

对于我们的例子,让我们假设我们想要检查一个3的滑动窗口,并且我们想要计算每个窗口(保留顺序)在数据集中出现的次数。
数据集中3的滑动窗口为:

  • H-T-H
  • T-H-H
  • H-H-H
  • H-H-T
  • H-T-H

因此,价值计算如下:

H-T-H 2
T-H-H 1
H-H-H 1
H-H-T 1

我曾想过将3个滑动行连接在一起,创建字符串表示的窗口,然后计算其中的值。这是一种有效的方法吗?还是有一种更以Pandas为导向的方式?

a64a0gku

a64a0gku1#

您的方法是有效的,但对于大型数组可能效率不高,因为字符串连接/聚合的代价很高。
您可以在这里使用numpy从数据的类似布尔方面获益:

from numpy.lib.stride_tricks import sliding_window_view as swv

a = swv(df['outcome'].eq('H'), 3)
vals, counts = np.unique(a, return_counts=True, axis=0)

out = pd.Series(counts, index=np.where(vals, 'H', 'T'))

输出:

(T, H, H)    1
(H, T, H)    2
(H, H, T)    1
(H, H, H)    1
dtype: int64
mo49yndu

mo49yndu2#

试试这个:

(data["outcome"]+"-"+data["outcome"].shift(1)+"-"+data["outcome"].shift(2)).dropna().value_counts()

相关问题