désolé pour le titre qui est peut-être plus compliqué que le problème lui-même;)
J'ai de suivi Pandas Dataframe P>
for i in range(1,4): j=df['anc']+i df['lap'+str(i)]= df['anc'+str(j)]
3 Réponses :
Un peu d'une approche "brute-force", mais je ne vois pas comment vous pouvez le faire autrement:
df[[f"lap{i}" for i in range(1,4)]]= \ df.apply(lambda x: \ pd.Series({f"lap{j}": x[f"anc{int(j+x['anc']-1)}"] for j in range(1,4)}) \ , axis=1)
Thks. Ne semble pas fonctionner. 'TypeError: l'objet' str 'ne peut pas être interprété comme un entier / KeyError: (' anc5.0 ', "s'est produite à l'index 1")'
J'ai ajouté une ligne - essayez: df ['ANC'] = DF ['ANC']. Astype (int) code> avant
Cela ne change rien :( toujours la même erreur.
Mais vous l'avez déjà appliqué avant, non? Je veux dire, cela devrait fonctionner comme, tant que vous ANC CODE> Colonne stocke des entiers.
Oui je l'ai appliqué en premier. Entrée [70]: DF ['ANC'] = DF ["ANC"]. Astype (int) df ["ANC"]. DTYPE OUT [70]: DTYPE ('int32') Puis j'essaie votre code et j'ai le erreur que j'ai partagée avec vous
Corrigé ma réponse!
SET pour chaque ligne de ligne dans les colonnes à l'aide de la valeur df2 ressemble à ceci: p> < Pré> xxx pré> réinitialiser l'index à nouveau si vous souhaitez revenir Recherche basée sur le nom alternatif au lieu de la recherche de position: p> Définissez une fonction d'utilité pour effectuer la recherche de colonne fournie à un flotteur. Il doit accepter un flotteur car les pandas reviendraient automatiquement un INT64 à un float64 si la série contient des valeurs non entières. Utilisez cette fonction pour effectuer la recherche et pour attribuer la sortie. Le seul avantage de cette approche est qu'aucun GRH code> &
ANC CODE> Comme indice que nous cherchons à indexer dans les colonnes
ANC [1-9] CODE>. Cela est également utile lorsque nous écrivons les colonnes de sortie:
ANC code>, qui est maintenant dans l'index, prenant Les 3 valeurs adjacentes, convertissez-les en une série avec des noms que vous vous attendez à la sortie et attribuez-les à la correspondance de colonnes de sortie p>
grh code> &
ANC code> Retour aux colonnes. p>
set_index code> est requis. p>
Atténue les problèmes que OP avait avec ma réponse, mais si les colonnes sont sans ordonnance ...
@Grzegorzskibinski, alors op peut trier leurs colonnes avant d'appliquer ma procédure
Merci pour votre réponse détaillée qui est très utile pour moi. Cependant, j'ai toujours l'erreur suivante: ValueError: ("La longueur des valeurs transcédées est 1, indice implique 3" ", s'est produite à l'index (4, 10) ')
@Bebio, obtenez-vous cette erreur sur l'échantillon que vous avez partagé ou votre jeu de données complet?
@Haleemur Ali - Correct qui vaincre le but d'appeler par ordre vs appelant par nom :)
@Haleemurali, vous avez complètement raison. J'étais sur un échantillon non cohérent. Votre code fonctionne bien sur mon jeu de données complet. Merci encore pour votre temps.
@Grzegorzskibinski, je ne suis pas clair sur ce que votre point est. Quoi qu'il en soit, voir ma réponse mise à jour pour une approche basée sur la recherche de nom. BTW, votre tentative fournie a un bogue et fonctionnerait si ANC {J + X ['ANC'] - 1} code> est remplacé par
ANC {int (x ["ANC '] + J-1)} code>
Mon objectif était que cette recherche de position est une approche risquée ici, pour ces raisons. Appeler par référence fonctionne bien mieux. Cheers, pour vérifier ma solution - mon cas de test n'était pas représentatif, je pense que c'est à son origine;)
grh anc anc1 anc2 anc3 anc4 anc5 anc6 anc7 anc8 anc9 anc10 lap1 lap2 lap3 lap4 lap5 lap6 0 2 5 0.10000 0.12000 0.1800 0.14000 0.15000 0.1900 0.20000 0.10000 0.21000 0.24000 0.15000 0.19000 NaN NaN NaN NaN 1 3 7 0.03299 0.05081 0.0355 0.02884 0.03054 0.0332 0.03115 0.02177 0.04903 0.04399 0.03115 0.02177 0.04903 NaN NaN NaN 2 4 3 0.00000 0.00000 0.0000 0.00000 0.00000 0.0000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.0 NaN NaN 3 5 4 0.00000 0.00000 0.0000 0.00000 0.00000 0.0000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.0 0.0 NaN 4 6 1 0.10000 0.10000 0.1000 0.10000 0.10000 0.1000 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000 0.1 0.1 0.1
Bonjour, et merci pour votre proposition. Cela ne correspond pas vraiment à mon problème. Le nombre de nouvelles colonnes de tour à ajouter n'est pas liée au numéro GRH. Son égal à 3 dans l'exemple.
J'ai compris. Je n'ai pas vu que le nombre de nouvelles colonnes de tour est fixe et qu'ils sont 3. Avec cette nouvelle information, il suffit de faire deux modifications pour corriger le code. Les modifications sont les suivantes: # numnewcols = df.grrh.max () ## code commenté numnewcols = 3 ## nouveau code # howmany = df.loc [rangée, 'GRH'] # Combien de valeurs alliées dois-je remplir ## code Howmany = 3 # Combien de valeurs allemandes dois-je remplir ## nouveau code
Pourriez-vous fournir un exemple de sortie de ce que vous voulez indiquer ce fichier de données s'il vous plaît comme détaillé ici exemple de reproductible minimal
Merci pour votre point. J'ai ajouté la sortie que je veux obtenir.