-2
votes

Comment combiner conditionnellement deux dataframes de pyspark?

J'ai deux dataframes. S'il vous plaît dites-moi comment je peux rejoindre les deux dataframes pour donner toutes les colonnes des deux, tandis que pour les colonnes communes, prenez les valeurs du premier Dataframe que si la valeur est null code>, auquel cas le remplacer par le cas Valeur du deuxième Dataframe.

Voici un exemple: P>

DF1 P>

id  col1 col2 col3 col4
 1    15   20    8   40
 2     0   30    5   50


4 commentaires

Afin de comprendre ce que vous essayez d'atteindre, quelle opération (en mots) effectuez-vous dans votre exemple pour obtenir le résultat?


Rejoignez Dataframe avec une colonne Union


À partir de votre exemple, il ressemble à ce que vous souhaitez réaliser est de rejoindre les deux DataFrames sur ID pour vous donner la colonne supplémentaire Col4 et pour COL1, COL2, COL3 Prendre les valeurs de DF1 à moins que la valeur ne soit nulle, auquel cas le remplacer avec la valeur de DF2? Si tel est le cas, vous devez vraiment expliquer cela mieux dans votre question. La question n'est actuellement pas claire et a reçu des votes en baisse.


Oui. Vous avez raison


3 Réponses :


0
votes

Vous pouvez combiner 2 dataframes basé sur ID:

df = pd.merge(df1, df2, on = 'id')
df


3 commentaires

Cela duplique des colonnes et ne supprime pas les valeurs nulles.


Pouvez-vous s'il vous plaît montrer les données où est-ce en double avec les valeurs NULL. La question était liée à la combinaison des dataframes


La question montre la sortie souhaitée (dernier bloc de code), ce qui n'est pas ce que votre solution produit.



0
votes

ici c'est: xxx

sortie
Entrez la description de l'image ici


0 commentaires

2
votes

joindre sur ID , suivi de lorsque / sinon est ce que vous êtes après. Ce code fonctionne pour votre exemple: xxx


9 commentaires

Je ne pensais pas que vous pourriez utiliser des colonnes de différents dataframes dans Spark, ai-je manqué quelque chose


La réponse se joint à deux dataframes sur une colonne commune ID afin d'utiliser des colums à partir de l'une quelconque des données en fonction de la condition.


Ce code fonctionne-t-il réellement pour vous? Parce que Spark ne prend pas en charge à l'aide de colonnes à partir de différents dataframes, c'est-à-dire dans une expression d'une colonne. Je viens de courir ce code sur Spark 2.4 et il ne fonctionne pas


Merci. Va chercher demain.


En fait, ignore-moi, j'ai eu un type dans le DF ça marche et cela vient de souffler mon esprit. En regardant le plan logique, il crée un projet avec toutes les colonnes du projet de DataFrames [ID # 431L, COL1 # 432L, COL2 # 433L, COL1 # 434L, COL1 # 444L, COL2 # 441L, COL3 # 441L, COL3 # 442L]. COL1] DF2 [COL1] se traduit en interne à Col1 # 432L et l'autre # 440L 🤯


Agréable. Vous avez réfléchi beaucoup plus que ce que j'ai fait à l'époque.


haha je pensais que cela a été précipité comme "_col1" comme ça ne fait rien. Mais vous avez trébuché sur une belle fonctionnalité d'étincelles sans papiers. Avez-vous lu / connaissez-vous quelque part?


Ah, je vois ce que tu veux dire, mais je ne pense pas que ce soit un cas d'utilisation d'une colonne à partir d'un autre Dataframe (l'expression sans coline agissant purement sur le Dataframe résultant de la jointure). L'utilisation de la référence au Dataframe d'origine vous permet de désambiguez la colonne que vous parlez de la carte de données actuelle lorsqu'il dispose de plusieurs colonnes avec le même nom.


Oui, je sais que c'est ce que je veux dire par le plan physique. Cela vous donne un moyen de référencer des colonnes ambiguës autrement, dans le plan physique appelant DF1 ['col1'] désigne le col1 # 432L et DF2 ['COL1'] COL1 # 440L