Existe-t-il un moyen dans Pandas d'utiliser la valeur de ligne précédente dans dataframe.appliquer lorsque la valeur précédente est également calculée dans appliquer?
J'ai le dataframe suivant:
Index_Date A B C D
===============================
2015-01-31 10 10 Nan 10
2015-02-01 2 3 Nan 22
2015-02-02 10 60 Nan 280
2015-02-03 10 100 Nan 250
Exiger:
Index_Date A B C D
===============================
2015-01-31 10 10 10 10
2015-02-01 2 3 23 22
2015-02-02 10 60 290 280
2015-02-03 10 100 3000 250
Column C
est dérivé de 2015-01-31
en prenant value
de D
.
, Puis-je utiliser le value
de C
pour 2015-01-31
et multipliez-la par le value
de A
sur 2015-02-01
et ajoutez B
.
J'ai essayé un apply
et un shift
en utilisant un {[15] } par cela donne une erreur de clé.
25
demandé sur
toasteez
2016-01-18 16:25:05
3 réponses
Tout d'abord, créez la valeur dérivée:
df.loc[0, 'C'] = df.loc[0, 'D']
Ensuite, parcourez les lignes restantes et remplissez les valeurs calculées:
for i in range(1, len(df)):
df.loc[i, 'C'] = df.loc[i-1, 'C'] * df.loc[i, 'A'] + df.loc[i, 'B']
Index_Date A B C D
0 2015-01-31 10 10 10 10
1 2015-02-01 2 3 23 22
2 2015-02-02 10 60 290 280
15
répondu
Stefan
2016-01-18 14:34:37
Étant donné une colonne de nombres:
lst = []
cols = ['A']
for a in range(100, 105):
lst.append([a])
df = pd.DataFrame(lst, columns=cols, index=range(5))
df
A
0 100
1 101
2 102
3 103
4 104
Vous pouvez référencer la ligne précédente avec shift:
df['Change'] = df.A - df.A.shift(1)
df
A Change
0 100 NaN
1 101 1.0
2 102 1.0
3 103 1.0
4 104 1.0
10
répondu
kztd
2017-05-03 17:05:52
L'application de la fonction récursive sur les tableaux numpy sera plus rapide que la réponse actuelle.
df = pd.DataFrame(np.repeat(np.arange(2, 6),3).reshape(4,3), columns=['A', 'B', 'D'])
new = [df.D.values[0]]
for i in range(1, len(df.index)):
new.append(new[i-1]*df.A.values[i]+df.B.values[i])
df['C'] = new
Sortie
A B D C
0 1 1 1 1
1 2 2 2 4
2 3 3 3 15
3 4 4 4 64
4 5 5 5 325
6