簡體   English   中英

根據數據框組在數據框中添加新列

[英]Add new column in dataframe based on dataframe group

給定數據框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。當三行或用戶名更改時,應從1重新開始。

我嘗試使用此代碼,但未獲得正確的結果。

df['segmentid'] = df.groupby([userid,tripid]).Transportation_Mode.apply(lambda x: x.ne(x.shift(1)).cumsum())

我不知道該怎么做,但我可能有一個或兩個主意。
為了添加新的列,您可以使用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來存儲每個組以及要提供的相應值。 然后,您可以在UDF中為每個記錄分配匹配值。

尋找WithColumn()UDF函數來解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM