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> 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> 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']
3 Réponses :
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. P>
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.
J'ai trouvé une solution non-pandas-natif: 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
Cela me donne une erreur. Déposez la virgule à la fin de SELECT T_1.C1, T_1.C2, CODE> pour l'éviter.
S'il te plaît, essaye maintenant.
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
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
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 Code>.@Lazlooxp pourquoi votre sortie attendue a-t-elle
a.c2 = [1, 2] code> au lieu de[3, 2] code>?