当前位置: 首页 > 知识库问答 >
问题:

使用future中的另一列值在pyspark dataframe中创建新列

慕弘义
2023-03-14

我有一个包含3列的数据表,我想使用列投影的值创建一个新列。
应该如何从投影中选择值?--它应该选择前一年投影的3个具体值--如果您要为2020年创建一个新列,它应该从2021年、2022年和2023年选择值

我已经尝试了以下SQL:

spark.sql(''从表中选择serial_number,pit_pd_proj为proj1,year,lead(pit_pd_proj,3)over(partition by serial_number order by year)为proj2,其中serial_number=1 order by year'')。show(50,truncate=false)

但这不是完整的答案

共有1个答案

洪宇定
2023-03-14

可以使用滞后函数来获取以前的值(在需要适当的排序/排序之前)。https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.functions.lag.html

my_window = Window.partitionBy().orderBy("year")
df = df.withColumn("prev_value", F.lag(df.projection).over(my_window))

如果您添加到问题示例表与所需的输出(因为只有源),我可以尝试复制它和更新答案(上面没有测试)。

 类似资料:
  • 基于dataframe列val_1值,查看其他列col_0-10标签前缀,然后创建另一列Mycl。 数据帧看起来像: 应用逻辑后所需的数据帧: 我是trid,但这不起作用:df['mycol']=df['col'df['val_1']。aType(str)] DDL生成DataFrame: 谢谢!

  • 在我的熊猫数据框架中,尝试创建一个名为loan\u status\u的列非常好。如果贷款状态为“当前”或“已全额支付”,则应包含整数1。否则,应包含整数0。 我使用https://resources.lendingclub.com/LoanStats_2018Q4.csv.zip作为我的数据集。 我的问题代码是: ()---- /usr/local/lib/python3.6/dist-packa

  • 问题内容: 我有看起来像的数据框: 为了进一步处理数据,我需要拆分该列,然后将其替换为如下所示的多列: 因此,这些列可以追加到初始数据帧。我不知道该怎么做,因为像 不能解决我的问题,因为我不仅需要基于列表中位置的列,还需要基于列表中每个唯一值的列。您知道我该如何处理吗? 问题答案: 您可以使用和: 如果需要计数值,则可以使用(我添加一个字符串进行测试):

  • 我在 RabbitMQ 中创建新队列时遇到了一些问题。我只创建一个使用者客户端,该客户端将使用来自另一个微服务的消息。 这是我到目前为止所做的。 应用程序属性: 配置类: 和侦听器类: 当我运行这个程序时,我有一条ACCESS_REFUSED消息,但我不知道为什么。我错过了什么吗?? 谢谢

  • 现在,我想在一个函数中使用这个,如下所示- 然后使用此函数在我的DataFrame中创建一个新列 总之,我希望我的列“new_col”是一个类型数组,其值为[[x,x,x]] 我得到以下错误。我在这里做错了什么? 原因:java.lang.UnsupportedOperationException:不支持org.apache.spark.sql.Column类型的模式

  • 我有两个熊猫数据框 步骤1:根据df1中唯一的“val”在df2中创建列,如下所示: 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'c