pyspark中每个帐号的六个月记录
我尝试过秩函数,但它给出的结果超过180天 这是我得到的结果,但我不想要这个结果这是错误的,它给出了超过180天的交易pyspark中每个帐号的六个月记录,pyspark,Pyspark,我尝试过秩函数,但它给出的结果超过180天 这是我得到的结果,但我不想要这个结果这是错误的,它给出了超过180天的交易 window = Window.partitionBy(df3['acctno']).orderBy(df3['trans_date']) df3.select('*', rank().over(window).alias('rank')) \ .filter(col('rank') <= 180) \ .show(500) }如果您想要前6个月,那么应该使
window = Window.partitionBy(df3['acctno']).orderBy(df3['trans_date'])
df3.select('*', rank().over(window).alias('rank')) \
.filter(col('rank') <= 180) \
.show(500)
}如果您想要前6个月,那么应该使用“年”和“月”字段,而不是“交易日期” 类似于
window=window.partitionBy(df3['acctno'])、orderBy(df3['year'],df3['month'])
应该会给您带来更好的结果
然后在编辑问题时过滤
rank,下面是一个使用不同方法的新答案。
我们的想法是为每个账号获取最小日期,计算限制日期(最小日期+180天),然后删除所有较旧的行
df.count()
> 60
w=窗口分区(df[“acctno”])
df=带列的df(“最小日期”),F.min(F.col(“转换日期”).cast(“日期”).over(w))
df=df.where(
F.col(“交易日期”)。演员阵容(“日期”)
54
请举例说明你想要什么,而不是你不想要什么……当然,我会告诉你我想要的输出。当你对问题进行编辑,使一个或多个答案无效时,正确的做法是创建一个新问题。编辑问题以改进它们(例如,澄清、添加附加信息等)是受鼓励的。但是,编辑一个问题以将其更改为另一个问题,从而导致一个或多个答案无效,这违反堆栈交换策略(即使您的原始问题不是您想要的)。通常情况下,任何具有编辑权限的用户都应该恢复此类编辑。在这种情况下,如果您收到了来自同一用户的新答案,那么将问题保留为当前状态似乎对您造成的伤害最小。我指的是每个帐户的前6个月交易,例如,一个帐户将从第3个月开始进行交易,因此在帽子的情况下,我希望交易从3月至9月,即3月至9月,这将被视为前6个月的交易account@flamboyantperson我认为我的代码满足了您的需要。我的代码中有什么地方与您的期望不符?您的答案并没有给出完整的结果,它只给出了输出中的几条记录,并且只提供了一个月的记录1@flamboyantperson你确定你没有因为节目
而误解输出吗?如果你想要所有的台词,请使用收集
我也尝试过。我已经更新了我的问题输出和所需的输出数据框结果非常感谢你的时间和努力这是我所期望的。你帮助了我。我接受这一点回答。
|2020| 2| 6| 2020-02-06| 1234abcd6| 2074-556-1111| 6666| CBS| 1|
|2020| 2| 7| 2020-02-07| 1234abcd7| 2074-556-1111| 6666| CBS| 2|
|2020| 2| 8| 2020-02-08| 1234abcd8| 2074-556-1111| 6666| CBS| 3|
|2020| 2| 9| 2020-02-09| 1234abcd9| 2074-556-1111| 6666|