根据条件过滤另一个数据框后,对该数据框应用value


我的问题是:有两个数据框架,信息框架正在构建中。我要做的是根据条件在参考数据框中进行过滤。当key为b时,将value为2作为整个列应用到into表中。输出数据帧是我想要做的最后一个。

Dataframe(信息)

+-----+-----+
|  key|value|
+-----+-----+
|    a|   10|
|    b|   20|
|    c|   50|
|    d|   40|
+-----+-----+

Dataframe(引用)

+-----+-----+
|  key|value|
+-----+-----+
|    a|   42|
|    b|    2|
|    c|    9|
|    d|  100|
+-----+-----+

下面是我想要的输出:Dataframe(输出)

+-----+-----+-----+
|  key|value|const|
+-----+-----+-----+
|    a|   10|    2|
|    b|   20|    2|
|    c|   50|    2|
|    d|   40|    2|
+-----+-----+-----+

我尝试了几种方法,下面是我尝试的最新方法,但是系统告诉我pyspark没有loc函数。

df_cal = (
info
.join(reference)
.withColumn('const', reference.loc[reference['key']=='b', 'value'].iloc[0])
.select('key', 'result', 'const')
)
df_cal.show()

下面是系统提醒的变暖:

AttributeError: 'Dataframe' object has no attribute 'loc'

这个解:

from pyspark.sql.functions import lit

target = 'b'
const = [i['value'] for i in df2.collect() if i['key'] == f'{target}']
df_cal = df1.withColumn('const', lit(const[0]))
df_cal.show()

+---+-----+-----+
|key|value|const|
+---+-----+-----+
|  a|   10|    2|
|  b|   20|    2|
|  c|   30|    2|
|  d|   40|    2|
+---+-----+-----+

最新更新