代码之家  ›  专栏  ›  技术社区  ›  Joan

基于多个panda列的唯一值进行分组

  •  0
  • Joan  · 技术社区  · 2 年前

    cluster_id     bin_time     trial_time           spikes
    1               0               0.5                1
    2               5               0.7                0 
    6               0               0.5                5
    3               5               0.7                0
    2               5               0.5                1
    8.              0.              0.7.               0
    

    前三列有一些重复的值。我想对峰值(最后一列)进行分组,以便对于每个唯一的trial\u时间和bin\u时间的唯一值,我得到峰值的总和。具有不同cluster\u id的尖峰应根据其所属的试验和bin\u时间(计入总和,该维度可以消失)组合在一起。

    最后,我试图得到一个矩阵,该矩阵在Y轴上具有唯一的trial\u时间坐标,在X轴上具有唯一的bin\u时间坐标,每个条目都是尖峰的总和(因此我不关心基于“cluster\u id”的微分)。

    以下是我尝试的内容:

    new_df = groupby('trial_time')['spikes']apply(lambda x: list(x))
    

    trial 0.5, bin time 0 --> count of total 1+5=6 spikes
    trial 0.5, bin time 5 --> count of total 1 spike
    trial 0.7, bin time 0 --> count of 0 spikes
    trial 0.7, bin time 5 --> count of 0+0 = 0
    

    理想情况下,只有尖峰数的2d阵列。

    1 回复  |  直到 2 年前
        1
  •  1
  •   wwii    2 年前

    按两列分组,并通过求和进行聚合。分组时不要使用第一列,因为你不在乎它。

    qf = df.iloc[:,1:].groupby(['bin_time','trial_time']).agg(sum)
    #qf = df.loc[:,['bin_time','trial_time','spikes']].groupby(['trial_time','bin_time']).agg(sum)
    

    trial_time bin_time
    0.5        0.0            6
               5.0            1
    0.7        5.0            0
    0.7.       0.0            0