我有一种情况,我想根据不同的条件在数据帧中创建排名列,并将第一排名设置为 true,将其他排名设置为 false。下面是一个示例数据帧:
Column1 Column2 Column3 Column4
ABC X1 null 2016-08-21 11:31:08
ABC X1 Test 2016-08-22 11:31:08
ABC X1 null 2016-08-20 11:31:08
PQR X1 Test 2016-08-23 11:31:08
PQR X1 Test 2016-08-24 11:31:08
PQR X1 null 2016-08-24 11:31:08
这里我想根据以下条件创建排名列:
Rank1:计算列2为X1且列3为空的行在列1上的排名,并按列4排序
Rank2:计算列2为X1而列3为测试的行在列1上的排名,并按列4排序
因此,预期结果将是:
Column1 Column2 Column3 Column4 Rank1 Rank2
ABC X1 null 2016-08-21 11:31:08 2 null
ABC X1 Test 2016-08-22 11:31:08 null 1
ABC X1 null 2016-08-20 11:31:08 1 null
PQR X1 Test 2016-08-23 11:31:08 null 1
PQR X1 Test 2016-08-24 11:31:08 null 2
PQR X1 null 2016-08-24 11:31:08 1 null
我尝试使用何时过滤掉数据来执行此操作,但随后排名不是从 1 开始的。
df = df.withColumn("Rank1", F.when((df.Column2 == 'X1') & (df.Column3.isNull()), rank().over(Window.partitionBy('Column1').orderBy('Column4')))
这确实给了我顺序,但顺序是随机的。我需要给第一等级贴上标签,所以对我来说了解它很重要。
我尝试的另一个选项是过滤临时数据帧中的数据并计算排名并将其连接回主数据帧。但是数据帧大小很大,需要计算多个列,因此会给出内存不足错误。任何关于解决这个问题的帮助将不胜感激。
您需要将该条件添加到“分区依据”窗口的order by子句中。
这应该对你有用:
condition_rank1 = (col("column2") == 'X1') & (col("column3").isNull())
condition_rank2 = (col("column2") == 'X1') & (col("column3") == 'Test')
w_rank1 = Window.partitionBy('column1').orderBy(*[when(condition_rank1, lit(1)).desc(), col("column4")])
w_rank2 = Window.partitionBy('column1').orderBy(*[when(condition_rank2, lit(1)).desc(), col("column4")])
df.withColumn("Rank1", when(condition_rank1, rank().over(w_rank1))) \
.withColumn("Rank2", when(condition_rank2, rank().over(w_rank2))) \
.show()
问题内容: 我正在尝试过滤具有作为行值的PySpark数据框: 我可以使用字符串值正确过滤: 但这失败了: 但是每个类别上肯定都有价值。这是怎么回事? 问题答案: 您可以使用/ : 如果你想简单地丢弃值,您可以使用与参数: 基于等式的比较将无法正常工作,因为在SQL中未定义,因此任何将其与另一个值进行比较的尝试都将返回: 与值进行比较的唯一有效方法是/ ,它等效于/方法调用。
问题内容: 我在python / pyspark中有一个带有列的数据框 ,依此类推...... 现在,我在此数据框中添加了新列。 现在,我必须安排这样的列的列来后 我已经完成如下 我收到此错误 为什么会发生此错误。我该如何纠正。 问题答案: 您可以用来更改列的顺序:
问题内容: 我有这样的数据我想创建一个PySpark数据框 我已经用过 但我总是得到 我如何获得如下所示的结果? 问题答案: 我发现将参数视为元组列表很有用,其中列表中的每个条目对应于DataFrame中的一行,而元组的每个元素对应于一列。 您可以通过将列表中的每个元素设为元组来获得所需的输出: 或者,如果更改源很麻烦,则可以等效地执行以下操作:
我有两个pyspark数据帧 DF1 : df2: 我想向df1添加一个列Location_Id,从df2获取匹配的Id,如下所示: 我如何才能做到这一点?
本文向大家介绍python 数据清洗之数据合并、转换、过滤、排序,包括了python 数据清洗之数据合并、转换、过滤、排序的使用技巧和注意事项,需要的朋友参考一下 前面我们用pandas做了一些基本的操作,接下来进一步了解数据的操作, 数据清洗一直是数据分析中极为重要的一个环节。 数据合并 在pandas中可以通过merge对数据进行合并操作。 结果为: 结果为: 结果为: 可以看到data1和d
问题内容: 我正在尝试使用三列阈值过滤pandas数据框 但是,我想在一个函数中执行此操作,在字典中将列名及其阈值提供给我。这是我的第一次尝试,可以。本质上,我将过滤器放入变量中,然后运行它: 现在,最后我将所有内容都放到了函数中,并且它停止了工作(也许函数不喜欢在函数中使用!): 我知道函数在函数内部使用时的行为会有所不同,但不确定如何解决该问题。另外,我想知道在给定两个输入的情况下,必须有一种
我想使用PySpark创建spark数据帧,为此我在PyCharm中运行了以下代码: 但是,它会返回此错误: 使用 Spark 的默认 log4j 配置文件:组织/缓存/火花/log4j-defaults.属性 将默认日志级别设置为“WARN”。要调整日志记录级别,请使用 sc.setLogLevel(新级别)。对于 SparkR,请使用 setLogLevel(新级别)。18/01/08 10:
问题内容: 我正在创建一个初始的熊猫数据框,以存储从其他代码生成的结果:例如 与预定义的列表。然后其他代码将为每个代码输出一些数字,并将它们存储在数据框中。 所以我希望第一列是第二列和第三列。然而,大熊猫将自动按字母顺序重新排列它,,在创建。虽然我以后可以手动重新排序,但我想知道是否有一种更简单的方法可以一步实现。 我想我也可以 但它看起来也很乏味。还有其他建议吗? 问题答案: 您可以将列的(正确