我有一个重复的numpy and or pandas数组,我如何找到它在哪里和什么时候重复?

mwyxok5s  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(98)

好的,这是pandas,但我不在乎是否有pandas或numpy解决方案,我只是在寻找一个解决方案,看看模式在哪里重复:这里是什么是有:

Out[713]: 
     sf  sx  sz  ss
0    12  15   5   6
1    15   1  13   3
2    13  10   6   1
3     9  14   8  15
4     2   2   6   6
5     8   8   2   2
6    15   8   2   5
7     4   6   9  11
8    14  13  10   9
9     2  12   5  11
10    1   6  15   8
11    3   4   9  14
12   12  12  14  14
13   15  15   5   5
14   13  10  10  13
15    9  11  13  15
16    2   1  10   9
17    8   6   3  13
18   15   8  14   9
19    4   3  13  10
20   14  14   2   2
21    2   2   5   5
22    1   6   1   6
23    3   1  13  15
24   12  15   0   3
25   15   1   9   7
26   13  10   2   5
27    9  14  14   9
28    2   2   2   2
29    8   8   2   2
30   15   8  10  13
31    4   6  15  13
32   14  13   5   6
33    2  12   5  11
34    1   6  13  10
35    3   4   5   2
36   12  12  13  13
37   15  15   6   6
38   13  10   8  15
39    9  11   6   4
40    2   1   2   1
41    8   6   2  12
42   15   8   9  14
43    4   3  10  13
44   14  14   5   5
45    2   2  15  15
46    1   6   9  14
47    3   1  14  12
48   12  15   5   6
49   15   1  10   4
50   13  10  13  10

use pd.read_clipboard()
if you want to copy paste

你可以看到sf在每个12的切片上重复,sx在每个24的切片上重复,sz在每个35的切片上重复。我怎么知道这些切片在哪里重复,而不需要手动检查它们,还有切片ss重复,但我似乎不能弄清楚如何。我可以使用什么策略来弄清楚ss在哪里重复。
提前感谢,我找不到一个答案,所以想作为任何人与这种情况的知识。
ss实际上是:ss = sf ^ sx ^ sz如果这有帮助的话
谢谢

fhg3lkii

fhg3lkii1#

您可以使用autocorr和自定义函数计算自相关:

import numpy as np

def get_lag(s):
    return next((lag for lag in range(1, len(s))
                if np.isclose(s.autocorr(lag=lag), 1)), 0)

df.apply(get_lag)
  • 注意。我使用了一个几乎为1的相关性作为值,并在第一次匹配时停止,如果您对近似匹配没有问题,您也可以调整逻辑以使用阈值。*

输出:

sf    12
sx    24
sz    35
ss     0
dtype: int64

相关问题