J'ai un grand nombre de colonnes correspondantes: cola1, cola2 ... cola60 et colb1, colb2 ... Colb60. Sur la base des valeurs de COLA1 et de COLB1, je voudrais créer COLC1. Comment créer une fonction qui itère à travers I dans la plage 1 à 3 pour Colai, Colbi et Colci? En réalité, la gamme est beaucoup plus grande.
J'ai réussi à créer une liste de noms de colonnes: p> quelques données d'échantillon: p> Comment Puis-je parcourir ces colonnes correspondantes dans une fonction?
Voici ma tentative qui ne fonctionne pas du tout. P> def test_fx(x):
for a in range(len(A_list)) and b in range(len(B_list)):
c == df[a]
if df[b] >= 10:
c = df[a]*2
elif [b] >= 20:
c = df[a]*3
elif [b] >= 30:
c = df[a]*4
return c
for c in range(len(C_list)):
df[c] = 'empty'
df[c].apply(test_fx)
3 Réponses :
Autant que je puisse lire, vous souhaitez parcourir toutes les colonnes en même temps, vous pouvez utiliser ITERROSS:
for index, row in df.iterrows(): print(row['colA1'], row['colA2'])
Le problème que je peux voir dans les lignes que vous avez postées est avec votre demande. Vous ne spécifiez jamais les colonnes de votre DF que vous souhaitez appliquer la fonction test_fx sur.
La syntaxe de base Si vous souhaitez créer une nouvelle colonne C à partir d'une colonne existante A dans un fichier de données est la suivante: p>
import numpy as np # get your column names range_list= list(range(1,4)) list_A = ['colA' + str(s) for s in range_list] list_B = ['colB' + str(s) for s in range_list] list_C = ['colC' + str(s) for s in range_list] #your self-defined function #note that it takes a tuple as input def test_fx(l): a,b=l q= a if b >= 30: q=a*4 elif b >= 20: q = a*3 elif b >= 40: q = a*2 else: q=np.nan return q #iterate over each couple of colAi, colBi and put the result in colCi for i in range(0, len(range_list)): a = list_A[i] #next colA name b = list_B[i] #next colB name c = list_C[i] df[c] = df[[a, b]].apply(test_fx, axis =1) print(df)
Dans cette sortie, COLC2 est manquant et COLC3 est peuplé avec "Aucun".
Vous avez raison. Je l'ai édité pour corriger le néant à une vraie Nan. Quand je l'exécute, je n'ai pas disparu Colc2. En outre, j'ai créé la fonction test_fx sur la première fonction que vous avez postée. Vous pouvez facilement modifier les valeurs à l'intérieur de la fonction, je l'ai créée afin qu'il ressemble de près votre cas d'utilisation. Je vais le modifier.
oops mauvaise copie-pâte d'un premier essai, la colonne C2 apparaît comme par magie
Si vous voulez itérer via vos colonnes, vous pouvez essayer ceci: avec cette méthode, je crée les colonnes CI une à la fois:
Je sous-ensemble la colonne IA par les valeurs des colonnes BI (ici il y a 3 sous-ensembles pour les 3 cas de votre exemple), puis je concaténate le résultat en une seule série qui sera ma colonne CI. p> la sortie de DF sera alors: p> colA1 colA2 colA3 colB1 colB2 colB3 C1 C2 C3
0 2 38 90 1 24 35 NaN 114.0 360.0
1 6 6 40 46 3 12 24.0 NaN 80.0
2 8 14 80 23 9 19 24.0 NaN 160.0
3 28 63 98 4 10 3 NaN 126.0 NaN
4 5 3 3 42 24 23 20.0 9.0 9.0
Publier quelques lignes de vos données et sortie souhaitée