给定数据帧df
userid tripid Transportation_Mode Altitude
1 1 walk 20
1 1 walk 22
1 1 walk 22
1 1 bike 24
1 1 bike 22
1 1 walk 25
1 1 walk 27
1 1 walk 22
1 1 car 26
1 1 car 21
1 1 car 27
1 2 car 22
1 2 car 24
1 2 car 22
1 2 walk 22
1 2 walk 24
2 1 bike 27
2 1 bike 21
2 1 bike 26
我喜欢像这样添加新的列segmentid
userid tripid Transportation_Mode Altitude Segmentid
1 1 walk 20 1
1 1 walk 22 1
1 1 walk 22 1
1 1 bike 24 2
1 1 bike 22 2
1 1 walk 25 3
1 1 walk 27 3
1 1 walk 22 3
1 1 car 26 4
1 1 car 21 4
1 1 car 27 4
1 2 car 22 1
1 2 car 24 1
1 2 car 22 1
1 2 walk 22 2
1 2 walk 24 2
2 1 bike 27 1
2 1 bike 21 1
2 1 bike 26 1
段是每个用户从1开始的数字序列。一个用户有多次出行,每次出行由多种交通方式组成。当用户改变传输模式时,它应该增加1。当tripid或userid改变时,它应该从1重新启动
我尝试使用这个代码,但没有得到正确的结果
df['segmentid'] = df.groupby([userid,tripid]).Transportation_Mode.apply(lambda x: x.ne(x.shift(1)).cumsum())
我不知道该怎么做,但我可能有一两个主意。
为了添加新列,可以使用
withColumn(colName, col)
函数。此函数将创建一个新列,其值可以使用UDF UserDefinedFunction
确定,如下所示:但是,在您的情况下,您必须在添加新列之前计算不同组的数量。在您的例子中,您可以创建一个
Dict
来存储每个组和您想要给出的相应值。然后在自定义项中,可以为每个记录分配匹配值寻找
WithColumn()
和UDF
函数来解决您的问题相关问题 更多 >
编程相关推荐