1
votes

Comment obtenir la valeur précédente de la même ligne (colonne précédente) à partir du dataframe pandas?

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


0 commentaires

3 Réponses :


2
votes

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


0 commentaires

0
votes

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


1 commentaires

Merci de partager cette solution. mais j'ai de nombreuses colonnes et je voulais l'appliquer uniquement aux valeurs nulles.



0
votes
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)

0 commentaires