-1
votes

Rejoindre extérieur gauche avec condition

Je voudrais fusionner deux cadres de données (comment = gauche) mais non seulement sur un index mais seulement sur une condition.

E.g assume deux trame de données p> xxx pré>

maintenant, je voudrais laisser la table de jointure extérieure A avec B utilisant index C1 sous la condition que A.C2> B.C2. C'est-à-dire que le résultat final devrait ressembler à p> xxx pré>

ps: Si vous souhaitez le tester vous-même: P>

import pandas as pd

df_A = pd.DataFrame([], columns={'C 1', 'C2'})
df_A['C 1'] = ['I', 'K', 'L']
df_A['C2'] = [3, 2, 5]

df_B = pd.DataFrame([], columns={'C1', 'C2', 'C3'})
df_B['C1'] = ['I', 'I', 'K', 'L']
df_B['C2'] = [5, 0, 2, 7]
df_B['C3'] = ['T', 'U', 'X', 'Z']



8 commentaires

Montrez-nous votre code, s'il vous plaît.


Le lien devrait vous aider! -


@Shivaprakash: Non, il n'y a pas de fusion conditionnelle mentionnée dans votre lien suggéré


Jetez un coup d'œil à ceci [Pandas: rejoindre Dataframe avec condition] ( Stackoverflow.com/Questtions/44080248/... ).


Quelques autres liens pertinents: (1) Stackoverflow.com/Questtions/23508351/... , (2) github.com/pandas-dev/pandas/issues/7480 .


@CYPHERX: Dans votre premier lien, les rangées sont complètement jetées après la fusion. Je veux fusionner uniquement des pièces du tableau B. Cela fait une différence


@Lazlooxp Ces liens ne sont là que là-bas pour vous d'obtenir des conseils / idées. Dans la plupart des cas, ils ne vous donneront pas une solution exacte. Ce que vous voulez, c'est Conditionné Fusionner dans Pandas DataFrames .


@Lazlooxp pourquoi votre sortie attendue a-t-elle a.c2 = [1, 2] au lieu de [3, 2] ?


3 Réponses :


0
votes

La solution rapide et sale serait simplement de rejoindre la colonne C1, puis de mettre NULL ou NAAN dans C3 pour toutes les lignes où C2_1> C2_2.


1 commentaires

J'ai développé la description du problème. Comme vous pouvez le constater maintenant, il suffit de remplacer les valeurs avec qui n'a malheureusement pas d'aide comme un autre problème est la duplication des lignes.



0
votes

J'ai trouvé une solution non-pandas-natif: xxx pré>

Cependant, pour les grandes tables, PandasQL s'avère être moins performante. P>

sortie: P> >

   C2 C1    C3   C2    C1
0   3  I     U  0.0     I
1   2  K     X  2.0     K
2   5  L  None  NaN  None


2 commentaires

Cela me donne une erreur. Déposez la virgule à la fin de SELECT T_1.C1, T_1.C2, pour l'éviter.


S'il te plaît, essaye maintenant.



0
votes

Méthode: requête directe SQL dans des pandas en utilisant Pandasql code> bibliothèque. Référence

  A.C1  A.C2  B.C2 B.C3
0    I     3     2    X
1    K     2     0    U


1 commentaires

Ce qui manque toujours est le comportement quand il n'y a pas de correspondance dans le tableau B (soit parce que C1 ne correspond pas à la correspondance ni la condition sur C2 n'est pas remplie). Dans ces cas, il ne faut pas être supprimé mais le côté droit doit être rempli de nulls. Je vais adapter la description en conséquence plus tard. Thx pour l'instant