首页 > 解决方案 > 我不知道如何从具有其他列条件的列中获取值

问题描述

对于每种类型(例如水或火等),我必须从 Dataframe 中获取具有最高攻击力的口袋妖怪的名称(“名称”代表一列,“攻击”也代表“攻击”)我写下这段代码:

PokDf.select('name').filter(PokDf.groupby('type1').agg({'attack'='max'})).show()

PokDf 是数据帧。

样本:

+----------+-----+------+
|      name|type1|attack|
+----------+-----+------+
| Bulbasaur|grass|    49|
|   Ivysaur|grass|    62|
|  Venusaur|grass|   100|
|Charmander| fire|    52|
|Charmeleon| fire|    64|
| Charizard| fire|   104|
|  Squirtle|water|    48|
| Wartortle|water|    63|
+----------+-----+------+

我不知道如何处理它。一旦我运行这条线,它就不起作用了。任何人都可以帮助我吗?

标签: pysparkdatabricks

解决方案


您可以使用 awindow来计算max over a partitionfilter on attack=max然后是select您的name列。

from pyspark.sql import functions as F
from pyspark.sql.window import Window

w=Window().partitionBy("type1")
df.withColumn("max",F.max("attack").over(w))\
  .filter('attack=max').select("name").show()

#+---------+  #output based on sample data above.
#|     name|
#+---------+
#| Venusaur|
#|Wartortle|
#|Charizard|
#+---------+

推荐阅读