查找值位于PySpark Dataframe中特定列之间的所有列的列表

周杰伦

我有Spark DF,它由20列组成,我想从中查找列的哪个值介于HighLow列值之间

Time,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,High,Low
09:16,930.9476296,927.4296671,924.1894385,923.2636589,921.6898335,920.578898,919.4679625,918.171871,915.95,913.728129,912.4320375,911.321102,910.2101665,908.6363411,907.7105615,904.4703329,900.9523704,919.95,917.65

我尝试下面的命令,它给了一个错误:

joineddata.withColumn('RR', map(lambda x: [x], ((F.col(x) >= (F.col('Low')) & (F.col(x) <= (F.col('High')) for x in joineddata.columns[1:18]))))).show()

错误

TypeError:列不可迭代

所需结果

我想拥有一个新列,该列是其名称介于High之间的列名称列表Low

Time,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,High,Low,RR
09:16,930.9476296,927.4296671,924.1894385,923.2636589,921.6898335,920.578898,919.4679625,918.171871,915.95,913.728129,912.4320375,911.321102,910.2101665,908.6363411,907.7105615,904.4703329,900.9523704,919.95,917.65,[2,1]
黑主教

只需使用when收集数组中的列名,然后between检查一列是否满足条件,然后过滤结果数组以删除空值(不满足条件的列):

df = joineddata.withColumn('RR', array(*[when(col(c).between(col('Low'), col("High")), lit(c)) for c in df.columns[1:18]]))\
               .withColumn('RR', expr("filter(RR, x -> x is not null)"))

df.select("Time", "RR").show()

#+-----+------+
#| Time|    RR|
#+-----+------+
#|09:16|[2, 1]|
#+-----+------+

请注意,第二步使用的filter功能仅在Spark 2.4+中可用。对于较旧的版本,可以使用UDF。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

选择列表中的Pandas DataFrame列值的所有行

查找位于其他 DataFrame 上两列值之间的 DataFrame 值

Python在一个列表中查找位于另一列表的值之间的值的方法

检查 PySpark Dataframe 中列的所有值是否相等

查找并替换NA中DataFrame中所有列的值

如何获取特定列值pyspark的所有列值?

在列表的列中查找特定值

过滤给定值在两个列值之间的pandas DataFrame中的所有行

查找数据框中特定值之间的所有值

选择列内特定行值之间的所有行

如何在r的列中的两个特定字符值之间标记所有行?

修改所有列pyspark中的值

Python在dataframe列中查找最大值以循环查找所有值

如何过滤包含列表中所有值的 DataFrame 列?

在Matlab中查找矩阵所有列之间的公共元素

查找位于其他两个DataFrame的索引值之间的DataFrame的索引值

如何查找具有特定列的所有值的设备?

Pyspark DataFrame如何在所有列中删除带有空值的行?

如何在PySpark DataFrame中删除具有空值的所有列?

在不是特定类型的Pandas DataFrame中查找所有值

在大查询的特定列中查找所有具有空值的行

如何创建一个列,将列中的所有值分组到属于熊猫中不同列的值之间的列表

在 JSONB 列中查找与哈希数组中的列表不匹配的所有值

如何在Pyspark的列中查找值最大的行名

熊猫-如果dtype列表(对象)的列中的值具有特定值,则查找行

是否可以使用pyspark过滤Spark DataFrames以返回列值在列表中的所有行?

查找特定列的所有唯一值的 SUMPRODUCT?

查找具有Null值的列,并将其写入Pyspark中每个记录的新列中

如何更改extjs中特定列中的所有值?