我有一个包含以下列的数据框,df1
Following the example there:
Project_end_date I_date Project_start_date id
Jan 30 2017 Jan 10 2017 Jan 1 2017 1
Jan 30 2017 Jan 15 2017 Jan 1 2017 1
Jan 30 2017 Jan 20 2017 Jan 1 2017 1
在这里,您可以找到i和开始日期之间的差异,即10天,15天和20天。然后你会把它们表示为项目持续时间的百分比,所以100 * 10/30 = 33%,100 * 15/30 = 50%,100 * 20/20 = 67%。然后你会得到这些的平均值(33%),最小值(33%),最大值(67%)等。
如何在ID
上进行分组后实现此目的df.groupby( “ID”)。 ?
答案 0 :(得分:1)
最简单的方法是在groupBy
:
import org.apache.spark.sql.{functions => F}
import spark.implicits._
df.withColumn("ival", (
$"I_date" - $"Project_start_date") /
($"Project_end_date" - $"Project_start_date"))
.groupBy('id').agg(
F.min($"ival").as("min"),
F.max($"ival").as("max"),
F.avg($"ival").as("avg")
)
如果您想避开withColumn
,可以在ival
,F.min
和F.max
内获取F.avg
的表达式更冗长。