J'ai un dataframe qui ressemble à ceci:
dfs = []
for i in df1.iterrows():
if ([df1['Corr_Value']] != np.nan):
a = df1['X']
b = df1['Y']
c = df1['Corr_Value']*100
df1['Remarks'] = (f'Solving {a} will solve {b} at {c}% probability')
dfs.append(df1)
Je veux créer une nouvelle colonne qui se compose des valeurs de X et Y colonnes. L'idée est de parcourir les lignes, si la Corr_Value n'est pas nulle, alors la nouvelle colonne devrait afficher:
La résolution (valeur de la colonne X) résoudra (Y valeur de la colonne) à (colonne Corr_value)% de probabilité.
par exemple, pour la première ligne, le résultat devrait être:
La résolution de 51182 résoudra 51389 avec 100% de probabilité.
Voici le code que j'ai écrit:
X Y Corr_Value 0 51182 51389 1.00 1 51182 50014 NaN 2 51182 50001 0.85 3 51182 50014 NaN
df1 est le dataframe qui stocke les données X , Y et Corr_Value .
Mais il semble y avoir un problème car le résultat que j'obtiens ressemble à ceci:
Mais le résultat devrait ressembler à ceci:
Si vous pouviez m'aider obtenir le résultat souhaité, ce serait génial.
3 Réponses :
Utilisez DataFrame.dropna pour supprimer les lignes manquantes et appliquer des f-string s pour la chaîne de sortie personnalisée avec DataFrame.apply :
f = lambda x: f'Solving {int(x["X"])} will solve {int(x["Y"])} at {int(x["Corr_Value"] * 100)}% probability.'
df['Remarks'] = df.dropna(subset=['Corr_Value']).apply(f,axis=1)
print (df)
X Y Corr_Value Remarks
0 51182 51389 1.00 Solving 51182 will solve 51389 at 100% probabi...
1 51182 50014 NaN NaN
2 51182 50001 0.85 Solving 51182 will solve 50001 at 85% probabil...
3 51182 50014 NaN NaN
Merci @jezrael, cela résout mon problème. Acceptant:)
Essayez simplement:
dfs = []
for i, r in df1.iterrows():
if (r['Corr_Value'] != np.nan):
a = r['X']
b = r['Y']
c = r['Corr_Value']*100
df1.at[i, 'Remarks'] = "Solving "+ str(a) + " will solve " + str(b) + " at " + str(c) + " % probability"
Je pense que le problème est lié à l'utilisation de df1 au lieu de la ligne actuelle.
Vous pouvez également utiliser numpy où:
X Y Corr_Value Remarks 0 51182 51389 1.00 Solving 51182 will solve 51389 with 100.0% pro... 1 51182 50014 NaN NaN 2 51182 50001 0.85 Solving 51182 will solve 50001 with 85.0% prob... 3 51182 50014 NaN NaN
Sortie:
import numpy as np df['Remarks'] = np.where(df.Corr_Value.notnull(), 'Solving ' + df['X'].astype(str) + ' will solve ' + df['Y'].astype(str) + ' with ' + (df['Corr_Value'] * 100).astype(str) + '% probability', df['Corr_Value'])
Bonne réponse mec @Ankur Sinha. Assez court et net