基于数据帧组在数据帧中添加新列

2024-09-25 00:26:10 发布

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

给定数据帧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())

Tags: 数据用户dfmode序列数字carwalk
1条回答
网友
1楼 · 发布于 2024-09-25 00:26:10

我不知道该怎么做,但我可能有一两个主意。
为了添加新列,可以使用withColumn(colName, col)函数。此函数将创建一个新列,其值可以使用UDF UserDefinedFunction确定,如下所示:

from pyspark.sql.functions import udf
squared_udf = udf(squared, LongType())
df = sqlContext.table("test")
display(df.select("id", squared_udf("id").alias("id_squared")))

但是,在您的情况下,您必须在添加新列之前计算不同组的数量。在您的例子中,您可以创建一个Dict来存储每个组和您想要给出的相应值。然后在自定义项中,可以为每个记录分配匹配值

寻找WithColumn()UDF函数来解决您的问题

相关问题 更多 >