Sql Pyspark:addnewcolumn在满足指定条件的列中包含一个值,在另一列中包含另一个值
“添加新列”在满足指定条件的列中包含与另一列中的另一个值对应的值 例如, 原始DF如下所示:Sql Pyspark:addnewcolumn在满足指定条件的列中包含一个值,在另一列中包含另一个值,sql,pyspark,apache-spark-sql,pyspark-sql,Sql,Pyspark,Apache Spark Sql,Pyspark Sql,“添加新列”在满足指定条件的列中包含与另一列中的另一个值对应的值 例如, 原始DF如下所示: +-----+-----+-----+ |col1 |col2 |col3 | +-----+-----+-----+ | A| 17| 1| | A| 16| 2| | A| 18| 2| | A| 30| 3| | B| 35| 1| | B|
+-----+-----+-----+
|col1 |col2 |col3 |
+-----+-----+-----+
| A| 17| 1|
| A| 16| 2|
| A| 18| 2|
| A| 30| 3|
| B| 35| 1|
| B| 34| 2|
| B| 36| 2|
| C| 20| 1|
| C| 30| 1|
| C| 43| 1|
+-----+-----+-----+
+----+----+----+----------+
|col1|col2|col3|new_column|
+----+----+----+----------+
| A| 17| 1| 17|
| A| 16| 2| 17|
| A| 18| 2| 17|
| A| 30| 3| 17|
| B| 35| 1| 35|
| B| 34| 2| 35|
| B| 36| 2| 35|
| C| 20| 1| 20|
| C| 30| 1| 20|
| C| 43| 1| 20|
+----+----+----+----------+
我需要为每个col1的组重复col2中对应于col3中1的值。如果col1中的任何一组在col3中有更多的值=1,则重复最小值
所需Df如下所示:
+-----+-----+-----+
|col1 |col2 |col3 |
+-----+-----+-----+
| A| 17| 1|
| A| 16| 2|
| A| 18| 2|
| A| 30| 3|
| B| 35| 1|
| B| 34| 2|
| B| 36| 2|
| C| 20| 1|
| C| 30| 1|
| C| 43| 1|
+-----+-----+-----+
+----+----+----+----------+
|col1|col2|col3|new_column|
+----+----+----+----------+
| A| 17| 1| 17|
| A| 16| 2| 17|
| A| 18| 2| 17|
| A| 30| 3| 17|
| B| 35| 1| 35|
| B| 34| 2| 35|
| B| 36| 2| 35|
| C| 20| 1| 20|
| C| 30| 1| 20|
| C| 43| 1| 20|
+----+----+----+----------+
为了获得col2的最小值,我遵循了此链接中接受的答案
有比这个解决方案更好的方法吗?您的问题假设行是有序的。SQL表表示无序集。您需要一个列来指定顺序。如果不是,则SQL不是此操作的合适工具。col1和COL3中的值是按顺序排列的