Je veux récupérer la valeur de la colonne précédente mais la même ligne et je dois multiplier cette valeur par 5 et l'écrire à l'emplacement actuel.
J'ai essayé la méthode shift des pandas mais cela ne fonctionne pas. après cela, j'ai écrit la fonction séparée pour obtenir le nom de la colonne précédente ... mais je pense que ce n'est pas la bonne approche.
''' def get_previous_column_name(wkName): v = int(wkName.strip('W')) newv = str(v - 1) if len(newv) == 1: newv = '0' + newv return 'W' + newv ''' dataframe: W01,W02,W03,W04,W05 7, 8 10,20 20, 40 expected result: W01,W02,W03,W04,W05 7, 8, 40, 200, 1000 10, 20, 100, 500, 2500 20, 40, 200, 1000, 5000
3 Réponses :
Voici une façon ffill
+ cum
df=df.ffill(1)*(5)**df.isnull().cumsum(1) df Out[230]: W01 W02 W03 W04 W05 0 7.0 8.0 40.0 200.0 1000.0 1 10.0 20.0 100.0 500.0 2500.0 2 20.0 40.0 200.0 1000.0 5000.0
Si vous n'avez en effet que trois colonnes à remplir, faites simplement la multiplication:
df['W03'] = df['W02'] * 5 df['W04'] = df['W03'] * 5 df['W05'] = df['W04'] * 5 df # W01 W02 W03 W04 W05 #0 7 8 40 200 1000 #1 10 20 100 500 2500 #2 20 40 200 1000 5000
Merci de partager cette solution. mais j'ai de nombreuses colonnes et je voulais l'appliquer uniquement aux valeurs nulles.
import pandas as pd data = pd.read_csv('C:/d1', sep=',', header=None,names=['W1','W2']) df=pd.DataFrame(data) dfNew=pd.DataFrame(columns=['W1','W2','W3','W4','W5']) (rows,columns)=df.shape for index in range(rows): tempRow=[df.iat[index,0],df.iat[index,1],df.iat[index,1]*5,df.iat[index,1]*25,df.iat[index,1]*125] dfNew.loc[len(dfNew)]=tempRow print() print(dfNew)