簡體   English   中英

Pyspark:Concat函數將列生成到新數據框中

[英]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.

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