我有一个数据框,如下所示 pyspark
```
df = sqlContext.createDataFrame(
[(1,'Y','Y',0,0,0,2,'Y','N','Y','Y'),
(2,'N','Y',2,1,2,3,'N','Y','Y','N'),
(3,'Y','N',3,1,0,0,'N','N','N','N'),
(4,'N','Y',5,0,1,0,'N','N','N','Y'),
(5,'Y','N',2,2,0,1,'Y','N','N','Y'),
(6,'Y','Y',0,0,3,6,'Y','N','Y','N'),
(7,'N','N',1,1,3,4,'N','Y','N','Y')
],
('id', 'compatible', 'product', 'ios', 'pc', 'other', 'devices', 'customer', 'subscriber', 'circle', 'smb')
)
df.show()
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+
| id|compatible|product|ios| pc|other|devices|customer|subscriber|circle|smb|
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+
| 1| Y| Y| 0| 0| 0| 2| Y| N| Y| Y|
| 2| N| Y| 2| 1| 2| 3| N| Y| Y| N|
| 3| Y| N| 3| 1| 0| 0| N| N| N| N|
| 4| N| Y| 5| 0| 1| 0| N| N| N| Y|
| 5| Y| N| 2| 2| 0| 1| Y| N| N| Y|
| 6| Y| Y| 0| 0| 3| 6| Y| N| Y| N|
| 7| N| N| 1| 1| 3| 4| N| Y| N| Y|
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+
现在我想创建一个新列 `p_no` 在Dataframe中,为一组记录指定相同的值。例如,两个记录是一个组
我的意思是我想赋值 `0` 到前两个记录并按 `1` 接下来的两张唱片等等
预期结果:
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+----+
| id|compatible|product|ios| pc|other|devices|customer|subscriber|circle|smb|p_no|
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+----+
| 1| Y| Y| 0| 0| 0| 2| Y| N| Y| Y| 1|
| 2| N| Y| 2| 1| 2| 3| N| Y| Y| N| 1|
| 3| Y| N| 3| 1| 0| 0| N| N| N| N| 2|
| 4| N| Y| 5| 0| 1| 0| N| N| N| Y| 2|
| 5| Y| N| 2| 2| 0| 1| Y| N| N| Y| 3|
| 6| Y| Y| 0| 0| 3| 6| Y| N| Y| N| 3|
| 7| N| N| 1| 1| 3| 4| N| Y| N| Y| 4|
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+----+
我申请了 `row_number` 功能如下
import pyspark.sql.functions as f
from pyspark.sql import Window
df1 = df.withColumn("p_no",f.row_number().over(Window.partitionBy()))
输出低于
df1.show()
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+----+
| id|compatible|product|ios| pc|other|devices|customer|subscriber|circle|smb|p_no|
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+----+
| 1| Y| Y| 0| 0| 0| 2| Y| N| Y| Y| 1|
| 2| N| Y| 2| 1| 2| 3| N| Y| Y| N| 2|
| 3| Y| N| 3| 1| 0| 0| N| N| N| N| 3|
| 4| N| Y| 5| 0| 1| 0| N| N| N| Y| 4|
| 5| Y| N| 2| 2| 0| 1| Y| N| N| Y| 5|
| 6| Y| Y| 0| 0| 3| 6| Y| N| Y| N| 6|
| 7| N| N| 1| 1| 3| 4| N| Y| N| Y| 7|
| 8| Y| Y| 1| 1| 2| 0| Y| Y| N| N| 8|
+---+----------+-------+---+---+-----+-------+--------+----------+------+---+----+
我不知道我需要做什么。我怎样才能达到我想要的
1条答案
按热度按时间au9on6nz1#
将行号四舍五入除以2即可:
或者,如果id是连续的,可以将id除以2取整。