如何从 Pandas 数据框中获取操作序列

问题描述 投票:0回答:1

我有一个 Python 中的 Pandas 数据框,当拉米雷斯进入和离开建筑物时会在其中注册。我还有一个清单,其中记录了大楼内的所有事件,从开灯到冲厕所或呼叫电梯。我已按时间顺序将它们排序为:

Visit 1: C2, C4, C1 None, None
Visit 2: C2, C1, C2, None, None
Visit 3: C1, C3, C1, C2, C3
Visit 4: C1, C2, C3, None, None

依此类推(这意味着在拉米雷斯第一次访问期间,首先发生了 C2,C4,然后是 C1)。

我想知道拉米雷斯负责的事件有哪些。为此,我想找到数据中最常见的序列。 例如,C1、C2 出现在他的第二次、第三次和第四次访问期间。 C2、C3 发生在他的第三次和第四次访问期间。

我需要一个程序来获取从最常见到最不常见的事件链,并且 C1、C1 或任何其他类似的对应该被忽略。

我想要一些关于如何获取此代码的建议

python pandas statistics pattern-matching combinations
1个回答
0
投票

假设这个输入:

          0   1   2     3     4
Visit 1  C2  C4  C1  None  None
Visit 2  C2  C1  C2  None  None
Visit 3  C1  C3  C1    C2    C3
Visit 4  C1  C2  C3  None  None

您需要迭代行和连续值对。最有效的是使用

itertools.pairwise
collections.Counter
:

from itertools import pairwise
from collections import Counter

out = Counter(p for _, s in df.T.items() for p in pairwise(s.dropna()))

s = pd.Series(out, name='counts')

输出:

# out
Counter({('C1', 'C2'): 3,
         ('C2', 'C3'): 2,
         ('C2', 'C4'): 1,
         ('C4', 'C1'): 1,
         ('C2', 'C1'): 1,
         ('C1', 'C3'): 1,
         ('C3', 'C1'): 1})

# s
C2  C4    1
C4  C1    1
C2  C1    1
C1  C2    3
    C3    1
C3  C1    1
C2  C3    2
Name: counts, dtype: int64
© www.soinside.com 2019 - 2024. All rights reserved.