对另一列中的重复数字序列进行计数

2024-05-03 12:15:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

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]})

我需要在一个新的列中计算“vehicle”列中重复值的序列,显示序列出现的次数。例如,车辆编号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]})

多谢各位


Tags: 数据dataframedf序列次数编号pdtrip
2条回答

筛选1值以屏蔽m,然后按链掩码创建组,将值移位&对于按位AND,最后使用累积和^{}

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

我不知道如何在熊猫身上做到这一点,但这在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)))

相关问题 更多 >