如何向pySpark数据帧添加一个新列,其中包含对其值大于0的列值进行计数?

时间:2017-01-04 11:02:10

标签: python dataframe spark-dataframe pyspark-sql

我想在pyspark数据框中添加一个新列,其中包含特定行中大于0的所有列值的计数。

这是我的演示数据框。

+-----------+----+----+----+----+----+----+
|customer_id|2010|2011|2012|2013|2014|2015|
+-----------+----+----+----+----+----+----+
|     1     |  0 |  4 |  0 | 32 |  0 | 87 |
|     2     |  5 |  5 | 56 | 23 |  0 | 09 |
|     3     |  6 |  6 | 87 |  0 | 45 | 23 |
|     4     |  7 |  0 | 12 | 89 | 78 | 0  |
|     6     |  0 |  0 |  0 | 23 | 45 | 64 |
+-----------+----+----+----+----+----+----+

以上数据框架在一年内由客户访问。我想算一下客户访问了多少年。所以我需要一个 visit_count 列,其中包含年度(2010,2011,2012,2013,2014,2015)的访问次数,其值大于0。

+-----------+----+----+----+----+----+----+-----------+
|customer_id|2010|2011|2012|2013|2014|2015|visit_count|
+-----------+----+----+----+----+----+----+-----------+
|     1     |  0 |  4 |  0 | 32 |  0 | 87 |    3      |
|     2     |  5 |  5 | 56 | 23 |  0 | 09 |    5      |
|     3     |  6 |  6 | 87 |  0 | 45 | 23 |    5      |
|     4     |  7 |  0 | 12 | 89 | 78 | 0  |    4      |
|     6     |  0 |  0 |  0 | 23 | 45 | 64 |    3      |
+-----------+----+----+----+----+----+----+-----------+

如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

试试这个:

df.withColumn('visit_count', sum((df[col] > 0).cast('integer') for col in df.columns))