[英]Pyspark: Concat function generated columns into new dataframe
我有一個帶有n個列的pyspark數據幀(df),我想生成另一個n個列的df,其中每列在相應的原始df列中記錄了連續黑白行的百分比差異。 並且新df中的列標題應為==舊數據幀中的相應列標題+“ _diff”。 使用以下代碼,我可以為原始df中的每一列生成百分比變化的新列,但無法將它們粘貼在具有合適列標題的新df中:
from pyspark.sql import SparkSession
from pyspark.sql.window import Window
import pyspark.sql.functions as func
spark = (SparkSession
.builder
.appName('pct_change')
.enableHiveSupport()
.getOrCreate())
df = spark.createDataFrame([(1, 10, 11, 12), (2, 20, 22, 24), (3, 30, 33, 36)],
["index", "col1", "col2", "col3"])
w = Window.orderBy("index")
for i in range(1, len(df.columns)):
col_pctChange = func.log(df[df.columns[i]]) - func.log(func.lag(df[df.columns[i]]).over(w))
謝謝
在這種情況下,您可以在select
的調用中進行列表理解。
為了使代碼更緊湊,我們首先可以獲取要在列表中進行比較的列:
diff_columns = [c for c in df.columns if c != 'index']
接下來,選擇索引並遍歷diff_columns
以計算新列。 使用.alias()
重命名結果列:
df_diff = df.select(
'index',
*[(func.log(func.col(c)) - func.log(func.lag(func.col(c)).over(w))).alias(c + "_diff")
for c in diff_columns]
)
df_diff.show()
#+-----+------------------+-------------------+-------------------+
#|index| col1_diff| col2_diff| col3_diff|
#+-----+------------------+-------------------+-------------------+
#| 1| null| null| null|
#| 2| 0.693147180559945| 0.6931471805599454| 0.6931471805599454|
#| 3|0.4054651081081646|0.40546510810816416|0.40546510810816416|
#+-----+------------------+-------------------+-------------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.