【问题标题】:Count sequences of repeated numbers in another column - pandas计算另一列中重复数字的序列 - 熊猫
【发布时间】:2020-05-07 08:06:00
【问题描述】:

我有以下数据框:

df = pd.DataFrame({'vehicle':[1,1,1,1,1,2,2,2,1,1,1,2,2,2,2,1,1],
               'waypoint':[1,2,3,4,5,1,2,3,1,2,3,1,2,3,4,1,2]})

我需要计算新列中“车辆”列中重复值的序列,以显示序列出现的次数。例如,车辆编号 1 的序列将为新列编号 1,如果出现另一个车辆编号 1 的序列,则新列将 = 2。上述数据帧的所需输出为:

df = pd.DataFrame({'vehicle':[1,1,1,1,1,2,2,2,1,1,1,2,2,2,2,1,1],
               'waypoint':[1,2,3,4,5,1,2,3,1,2,3,1,2,3,4,1,2],
               'trip':[1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3]})

谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我不知道如何在 pandas 中执行此操作,但这已在 itertools 中解决。

    from itertools import groupby
    
    sequence = [1,1,1,1,1,2,2,2,1,1,1,2,2,2,2,1,1]
    for i,j in groupby(sequence):
        print(i,'repeats',len(list(j)))
    

    【讨论】:

    • 感谢您的回复。赞成,但另一个答案被接受了,因为它不依赖于 itertools :)
    【解决方案2】:

    过滤1 值以掩码m,然后通过链掩码创建组,并按位& 移位值AND,最后使用累积和Series.cumsum

    m = df['vehicle'].eq(1)
    df['trip1'] = m.ne(m.shift() & m).cumsum()
    #alternative
    #df['trip1'] = ((~m).shift().fillna(m) & m).cumsum()
    
    print (df)
        vehicle  waypoint  trip  trip1
    0         1         1     1      1
    1         1         2     1      1
    2         1         3     1      1
    3         1         4     1      1
    4         1         5     1      1
    5         2         1     1      1
    6         2         2     1      1
    7         2         3     1      1
    8         1         1     2      2
    9         1         2     2      2
    10        1         3     2      2
    11        2         1     2      2
    12        2         2     2      2
    13        2         3     2      2
    14        2         4     2      2
    15        1         1     3      3
    16        1         2     3      3
    

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 2018-03-19
      • 2022-01-18
      • 2017-05-30
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2018-06-06
      相关资源
      最近更新 更多