Diviser Pyspark Dataframe colonne par Colonne, en d'autres Pyspark Dataframe lors de l'ID Correspond à
J'ai un PySpark DataFrame, df1, qui ressemble à ceci:
CustomerID CustomerValue
12 .17
14 .15
14 .25
17 .50
17 .01
17 .35
J'ai un deuxième PySpark DataFrame, df2, c'est-à df1 regroupées par code client et agrégées par la fonction somme. Il ressemble à ceci:
CustomerID CustomerValueSum
12 .17
14 .40
17 .86
Je veux ajouter une troisième colonne à df1 qui est df1['CustomerValue'] divisé par df2['CustomerValueSum'] pour la même Customerid. Cela ressemblerait à:
CustomerID CustomerValue NormalizedCustomerValue
12 .17 1.00
14 .15 .38
14 .25 .62
17 .50 .58
17 .01 .01
17 .35 .41
En d'autres termes, je suis en train de convertir ce Python/Pandas code de PySpark:
normalized_list = []
for idx, row in df1.iterrows():
(
normalized_list
.append(
row.CustomerValue / df2[df2.CustomerID == row.CustomerID].CustomerValueSum
)
)
df1['NormalizedCustomerValue'] = [val.values[0] for val in normalized_list]
Comment puis-je faire cela?
OriginalL'auteur TrentWoodbury | 2017-04-07
Vous devez vous connecter pour publier un commentaire.
Code:
De sortie:
OriginalL'auteur dfernig
Cela peut également être réalisé à l'aide de l'Étincelle fonction de Fenêtre où vous n'avez pas besoin de créer des dataframe avec les valeurs agrégées (df2):
La création des données pour l'entrée dataframe:
Définissant une Fenêtre partitionné par code client:
OriginalL'auteur Abhishek Bansal