val max_col = df.select(df.columns.map(c => max(c)): _*)
给我一个包含多列的1行数据帧。其中许多列的值为0,即这些列中没有其他值(均为正数)。
如何仅选择最大值为>的列? 0?即如何删除所有列(不是行,有关于如何删除行的大量细节),其中max大于0?
a b c d
1 7 0 1
想要
a b d
1 7 1
用
val exprs = max_col.columns.map(c => when(col(c) !== 0, col(c)).otherwise("null").as(c))
val df_new = max_col.select(exprs:_*)
我可以将上面转到
a b c d
1 7 null 1
但没有成功找到列的na.drop。
好像是一个新手'问题,但没有找到一个好方法,但(我在网上浏览了几个小时,再次意识到谷歌肯定有他们的服务问题)。
非常感谢任何帮助。非常
答案 0 :(得分:1)
你可以这样做:
val df = Seq((1,7,0,1)).toDF("a", "b", "c", "d")
df.selectExpr(df.first().getValuesMap[Int](df.columns).filter(_._2 > 0).keys.toSeq: _*).show
+---+---+---+
| a| b| d|
+---+---+---+
| 1| 7| 1|
+---+---+---+
first()
函数的行对象; getValuesMap
将行转换为地图;