当 "ID_ENTE_COMPETENZA_TIPO" 等于数据帧中的 'S' 时,从另一个静态 table 获取值
Get value from another static table when "ID_ENTE_COMPETENZA_TIPO" is equal to 'S' in an dataframe
我有一个简单的数据框,例如:
df
id_ente_competenza_tipo | INOLTRO_PSAP2
3 S
3 S
3 N
2 S
我有另一个数据帧静态 table:
df_ente
id_ente_competenza_tipo| des_ente_competenza_tipo
1 Carabinieri
2 Polizia di Stato
3 Emergenza Sanitaria
我想要如果 df.ID_ENTE_COMPETENZA_TIPO =='S' --> df.ID_ENTE_COMPETENZA_TIPO =df_ente.des_ente_competenza_tipo 其中 df.id_ente_competenza_tipo ==df_ente.id_ente_competenza_tipo 否则 df.id_ente_competenza_tipo
我想要这个:
id_ente_competenza_tipo | INOLTRO_PSAP2
Emergenza Sanitaria S
Emergenza Sanitaria S
3 N
Polizia di Stato S
我的代码是这样的,但有更有效的方法吗?
df=df.withColumn("ID_ENTE_COMPETENZA_TIPO",F.when(df.INOLTRO_PSAP2=="S",df_ente.join(df,
df_ente["id_ente_competenza_tipo"]==df["ID_ENTE_COMPETENZA_TIPO"])\
.select("des_ente_competenza_tipo").head()[0]).otherwise(df.ID_ENTE_COMPETENZA_TIPO))
感谢帮助
此致
最好在加入表后应用根据 INOLTRO_PSAP2
在 des_ente_competenza_tipo
或 id_ente_competenza_tipo
之间进行选择的逻辑。使用您在代码段中应用的 when and otherwise
。
from pyspark.sql import functions as F
df = spark.createDataFrame([(3, "S", ),(3, "S", ),(3, "N", ),(2, "S", ),], ("id_ente_competenza_tipo", "INOLTRO_PSAP2"))
df_ente = spark.createDataFrame([(1, "Carabinieri", ),(2, "Polizia di Stato", ),(3, "Emergenza Sanitaria", ),], ("id_ente_competenza_tipo", "des_ente_competenza_tipo"))
results = df.join(df_ente, ["id_ente_competenza_tipo"])\
.withColumn("id_ente_competenza_tipo", F.when(df["INOLTRO_PSAP2"] == "N", df["id_ente_competenza_tipo"]).otherwise(df_ente["des_ente_competenza_tipo"]))\
.select("id_ente_competenza_tipo", "INOLTRO_PSAP2")
results.show()
输出
+-----------------------+-------------+
|id_ente_competenza_tipo|INOLTRO_PSAP2|
+-----------------------+-------------+
| Polizia di Stato| S|
| Emergenza Sanitaria| S|
| Emergenza Sanitaria| S|
| 3| N|
+-----------------------+-------------+
我有一个简单的数据框,例如:
df
id_ente_competenza_tipo | INOLTRO_PSAP2
3 S
3 S
3 N
2 S
我有另一个数据帧静态 table:
df_ente
id_ente_competenza_tipo| des_ente_competenza_tipo
1 Carabinieri
2 Polizia di Stato
3 Emergenza Sanitaria
我想要如果 df.ID_ENTE_COMPETENZA_TIPO =='S' --> df.ID_ENTE_COMPETENZA_TIPO =df_ente.des_ente_competenza_tipo 其中 df.id_ente_competenza_tipo ==df_ente.id_ente_competenza_tipo 否则 df.id_ente_competenza_tipo
我想要这个:
id_ente_competenza_tipo | INOLTRO_PSAP2
Emergenza Sanitaria S
Emergenza Sanitaria S
3 N
Polizia di Stato S
我的代码是这样的,但有更有效的方法吗?
df=df.withColumn("ID_ENTE_COMPETENZA_TIPO",F.when(df.INOLTRO_PSAP2=="S",df_ente.join(df,
df_ente["id_ente_competenza_tipo"]==df["ID_ENTE_COMPETENZA_TIPO"])\
.select("des_ente_competenza_tipo").head()[0]).otherwise(df.ID_ENTE_COMPETENZA_TIPO))
感谢帮助 此致
最好在加入表后应用根据 INOLTRO_PSAP2
在 des_ente_competenza_tipo
或 id_ente_competenza_tipo
之间进行选择的逻辑。使用您在代码段中应用的 when and otherwise
。
from pyspark.sql import functions as F
df = spark.createDataFrame([(3, "S", ),(3, "S", ),(3, "N", ),(2, "S", ),], ("id_ente_competenza_tipo", "INOLTRO_PSAP2"))
df_ente = spark.createDataFrame([(1, "Carabinieri", ),(2, "Polizia di Stato", ),(3, "Emergenza Sanitaria", ),], ("id_ente_competenza_tipo", "des_ente_competenza_tipo"))
results = df.join(df_ente, ["id_ente_competenza_tipo"])\
.withColumn("id_ente_competenza_tipo", F.when(df["INOLTRO_PSAP2"] == "N", df["id_ente_competenza_tipo"]).otherwise(df_ente["des_ente_competenza_tipo"]))\
.select("id_ente_competenza_tipo", "INOLTRO_PSAP2")
results.show()
输出
+-----------------------+-------------+
|id_ente_competenza_tipo|INOLTRO_PSAP2|
+-----------------------+-------------+
| Polizia di Stato| S|
| Emergenza Sanitaria| S|
| Emergenza Sanitaria| S|
| 3| N|
+-----------------------+-------------+