EDIT: je réalise que je mis mon exemple de manière incorrecte, la version corrigée suit:Python: itérer sur dataframes de différentes longueurs, et calculer une nouvelle valeur avec des valeurs répétées
J'ai deux dataframes:
df1 = pd.DataFrame({'x values': [11, 12, 13], 'time':[1,2.2,3.5})
df2 = pd.DataFrame({'x values': [11, 21, 12, 43], 'time':[1,2.1,2.6,3.1})
Ce que je dois faire est itérer sur ces deux dataframes, et calculer une nouvelle valeur, qui est un ratio des valeurs de x dans df1 et df2. La difficulté vient parce que ces données sont de différentes longueurs.
Si je voulais juste calculer des valeurs dans les deux, je sais que je pourrais utiliser quelque chose comme zip, ou même carte. Malheureusement, je ne veux pas laisser tomber de valeurs. Au lieu de cela, je dois être capable de comparer la colonne de temps entre les deux cadres pour déterminer si oui ou non pour copier sur une valeur d'un temps antérieur au calcul de dans la période de temps suivante.
Ainsi, par exemple, je calculerait le premier rapport:
df1["x values"][0]/df2["x values"][0]
Alors, pour la seconde, je vérifie que la mise à jour qui se passera ensuite, qui dans ce cas est de DF2, donc DF1 [ « temps »] < DF2 [ "temps"] et:
df1["x values"][0]/df2["x values"][1]
Pour la troisième, je voyais que DF1 [ "temps"]> DF2 [ "temps"], de sorte que le troisième calcul serait:
df1["x values"][1]/df2["x values"][1]
La seule fois où les deux valeurs doivent être utilisées pour calculer le rapport à partir de la même "position" est si les temps dans les deux données sont égaux.
Et ainsi de suite. Je suis très confus quant à savoir si c'est possible d'exécuter en utilisant quelque chose comme une fonction lambda, ou itertools. J'ai fait quelques tentatives, mais la plupart ont donné des erreurs. Toute aide serait appréciée.
Le problème est que j'ai simplifié mon exemple, si le temps ne correspond pas réellement entre les deux cadres - ils ont des dates différentes – Sveinn
Oh alors quelle serait la base de trouver le rapport? – Vaishali
J'ai essentiellement besoin d'obtenir des ratios pour toutes les valeurs "mises à jour". Donc, si vous pensez que le temps est linéaire, chaque fois que j'ai une valeur x associée à une nouvelle période, j'ai besoin de mettre à jour le calcul du ratio. Je suis donc en train de suivre l'évolution du ratio au fil du temps. Je me rends compte maintenant que j'ai mis en place mon exemple un peu incorrectement. – Sveinn