【问题标题】:Selecting Sequence Data Based on a Counter Value in Pandas根据 Pandas 中的计数器值选择序列数据
【发布时间】:2020-03-14 07:58:48
【问题描述】:

我正在尝试解决一个问题,它涉及一系列数据(类似于时间序列,但实际上更多的是事件序列)、发生的事件类型以及重置为零的计数器,具体取决于外部动作(参见 Raw_Data)。我希望能够在每次计数器重置为零(包括第一个 counter=0 行)之间提取类型数据,这不会定期发生(Wanted_Result)。在 Pandas 中有没有简单的方法来做到这一点? - 目标是在计数器重置时在实例之间获取一些类型的计数(和其他分析)。

我有什么:

[![Raw_Data][1]][1]

我想要的,虽然多索引或者只是具有不同序列的唯一标签的另一列会更干净:

[![Wanted_Data][2]][2]

编辑:添加数据文本:

       [2, 'B', 1],
       [3, 'C', 2],
       [4, 'D', 3],
       [5, 'A', 0],
       [6, 'C', 1],
       [7, 'B', 2],
       [8, 'D', 3],
       [9, 'D', 4],
       [10, 'A', 5],
       [11, 'C', 0],
       [12, 'B', 1],
       [13, 'A', 2],
       [14, 'D', 3],
       [15, 'A', 4],
       [16, 'C', 5],
       [17, 'D', 6],
       [18, 'B', 0],
       [19, 'A', 1],
       [20, 'C', 2],
       [21, 'A', 0],
       [22, 'D', 1],
       [23, 'B', 2],
       [24, 'A', 3],
       [25, 'C', 4],
       [26, 'B', 0],
       [27, 'A', 1],
       [28, 'A', 2],
       [29, 'C', 3],
       [30, 'A', 0],
       [31, 'B', 1],
       [32, 'D', 2],
       [33, 'A', 3],
       [34, 'C', 0],
       [35, 'A', 1],
       [36, 'C', 2],
       [37, 'C', 3],
       [38, 'B', 4],
       [39, 'D', 5],
       [40, 'A', 6],
       [41, 'B', 0],
       [42, 'A', 1],
       [43, 'D', 2],
       [44, 'D', 3],
       [45, 'A', 4],
       [46, 'C', 5],
       [47, 'A', 6],
       [48, 'B', 7],
       [49, 'C', 0]]```

```Wanted_Data=[[1.0, 'A', 0.0, 5.0, 'A', 0.0, 11.0, 'C', 0.0, 18.0, 'B', 0.0,
        21.0, 'A', 0.0, 26.0, 'B', 0.0, 30.0, 'A', 0.0, 34.0, 'C', 0.0,
        41, 'B', 0, 49.0, 'C', 0.0],
       [2.0, 'B', 1.0, 6.0, 'C', 1.0, 12.0, 'B', 1.0, 19.0, 'A', 1.0,
        22.0, 'D', 1.0, 27.0, 'A', 1.0, 31.0, 'B', 1.0, 35.0, 'A', 1.0,
        42, 'A', 1, nan, nan, nan],
       [3.0, 'C', 2.0, 7.0, 'B', 2.0, 13.0, 'A', 2.0, 20.0, 'C', 2.0,
        23.0, 'B', 2.0, 28.0, 'A', 2.0, 32.0, 'D', 2.0, 36.0, 'C', 2.0,
        43, 'D', 2, nan, nan, nan],
       [4.0, 'D', 3.0, 8.0, 'D', 3.0, 14.0, 'D', 3.0, nan, nan, nan,
        24.0, 'A', 3.0, 29.0, 'C', 3.0, 33.0, 'A', 3.0, 37.0, 'C', 3.0,
        44, 'D', 3, nan, nan, nan],
       [nan, nan, nan, 9.0, 'D', 4.0, 15.0, 'A', 4.0, nan, nan, nan,
        25.0, 'C', 4.0, nan, nan, nan, nan, nan, nan, 38.0, 'B', 4.0, 45,
        'A', 4, nan, nan, nan],
       [nan, nan, nan, 10.0, 'A', 5.0, 16.0, 'C', 5.0, nan, nan, nan,
        nan, nan, nan, nan, nan, nan, nan, nan, nan, 39.0, 'D', 5.0, 46,
        'C', 5, nan, nan, nan],
       [nan, nan, nan, nan, nan, nan, 17.0, 'D', 6.0, nan, nan, nan, nan,
        nan, nan, nan, nan, nan, nan, nan, nan, 40.0, 'A', 6.0, 47, 'A',
        6, nan, nan, nan],
       [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
        nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 48, 'B',
        7, nan, nan, nan]]```


  [1]: https://i.stack.imgur.com/ETy5n.png
  [2]: https://i.stack.imgur.com/azSYE.png

【问题讨论】:

  • 您可以将数据粘贴为文本而不是图片吗?

标签: python-3.x pandas dataframe jupyter-notebook sequence


【解决方案1】:

IIUC:

df = pd.DataFrame({'Sequence':np.arange(1,26),
                  'Type':[*'ABCDACBDDACBADACDBACADBAC'],
                  'Counter':[0,1,2,3,0,1,2,3,4,5,0,1,2,3,4,5,6,0,1,2,0,1,2,3,4]})

df['grp'] = df['Counter'].eq(0).cumsum()

df_out = df.set_index(['Counter','grp']).unstack('grp')
df_out = df_out.sort_index(level=1, axis=1)
df_out.columns =  [f'{i}.{j}' for i, j in df_out.columns]
print(df_out)

输出:

         Sequence.1 Type.1  Sequence.2 Type.2  Sequence.3 Type.3  Sequence.4 Type.4  Sequence.5 Type.5
Counter                                                                                               
0               1.0      A         5.0      A        11.0      C        18.0      B        21.0      A
1               2.0      B         6.0      C        12.0      B        19.0      A        22.0      D
2               3.0      C         7.0      B        13.0      A        20.0      C        23.0      B
3               4.0      D         8.0      D        14.0      D         NaN    NaN        24.0      A
4               NaN    NaN         9.0      D        15.0      A         NaN    NaN        25.0      C
5               NaN    NaN        10.0      A        16.0      C         NaN    NaN         NaN    NaN
6               NaN    NaN         NaN    NaN        17.0      D         NaN    NaN         NaN    NaN

【讨论】:

    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多