[英]Pandas DataFrame add new column values based on group by multiple conditions
[英]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.