Je veux fusionner deux jeux de données indexés par Mon approche consiste à déplacer des dates de miois au jour ouvrable des dates de fin de mois. p> données: p> sortie: p> C'est ce que je veux (j'ai enlevé le AVERTISSEMENT DE PERFORMANCE): P> temps code> et
id code>. Le problème est que le temps est légèrement différent dans chaque ensemble de données. Dans un ensemble de données, le temps (mensuel) est au milieu du mois, donc le 15 de chaque mois. Dans l'autre jeu de données, c'est le dernier jour ouvrable. Cela devrait toujours être un match un à un, mais les dates ne sont pas exactement les mêmes.
df.reset_index(inplace=True)
df['date'] = df['date'] + BMonthEnd()
df.set_index(['date','id'], inplace=True)
3 Réponses :
Vous pouvez utiliser set_levels < / code>
afin de définir des niveaux multiindex:
Je suis hors des votes, mais j'ai effacé un et je suis avancé cela parce que j'aime aussi cette solution.
Merci beaucoup apprécié! J'ai aussi aimé votre solution!
C'est une excellente solution propre au problème de la ré-indexation, mais j'ai marqué la solution ci-dessous comme la réponse, car elle a résolu mon problème global de la fusion avec de meilleures performances. En sautant la ré-indexation, il était plus rapide globalement.
Vous pouvez simplement le construire à nouveau: set_levels code> reconstruit implicitement l'index sous les couvercles. Si vous avez plus de deux niveaux, cette solution devient maltress, alors envisagez d'utiliser
set_levels code> pour taper la brièveté. p> p>
Cela fonctionne aussi bien. Je n'avais pas pensé à cette approche.
Depuis que vous souhaitez fusion de toute façon, vous pouvez oublier de modifier l'index et d'utiliser Utiliser et voici un avec le dernier jour ouvrable du mois, Utilisez pandas.merge_asof () code>
DATA H1>
DF1 code> DF1 code> DF1 code> DF1 CODE > p>
df2 code> p>
Fusionner h1>
df1 code> comme gauche
dataframe code>, puis choisissez la direction de la fusion comme avant depuis le dernier jour ouvrable après le 15ème. En option, vous pouvez définir une tolérance. Ceci est utile dans la situation où vous manquez un mois dans la droite
dataframe code> et vous empêchera de fusionner
03-31-2011 code> à
02-15-2011 code> Si vous manquez des données pour le dernier jour ouvrable de février. P>
0_x 0_y
date id
2011-01-15 1 -0.810581 -0.277675
2 1.177235 0.086539
3 0.083883 1.441449
2011-02-15 1 1.217419 1.330212
2 -0.970804 -0.028398
3 1.262364 -0.114297
2011-03-15 1 -0.026136 -0.031264
2 -0.036250 -0.787093
3 -1.103929 -0.133088
2011-04-15 1 -1.303298 0.938732
C'est excellent - sur mes plus grandes données, cette fusion est plus rapide que de ré-régler l'index puis de la fusionner.
De plus, je voulais garder les dates de fin du mois, donc je viens de changer direction = 'backward' code> et l'ordre des cadres de données et qui fonctionne.