#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Я пытаюсь найти изменение в nav в моем фрейме данных, разделив каждый индекс на предыдущий индекс. Я новичок в этом и в тупике! Надеюсь, вы сможете помочь. Спасибо!
t1 = 0
d = []
for f in final_df['nav']:
t = float(f)
d.append(t / t1)
t1 = t
print(d)
Комментарии:
1.
df['2'] / df['1']
2. Не могли бы вы быть немного более четкими и показать, каково содержимое
df['1']
иdf['2']
? Кроме того, каким будет ожидаемый результат? Вам нужен список или новый столбец во фрейме данных?
Ответ №1:
Используйте shift
в серии.
d = final_df['nav'] / final_df['nav'].shift(-1)
Вам нужно будет выяснить, что делать с последним элементом, поскольку делить не на что.
Ответ №2:
Вы можете попробовать использовать метод .shift для знаменателя. Это уменьшит значения на единицу.
В приведенном ниже примере получается
500 / NaN = NaN
415/500 = .83
293/415 = .71
… и так далее
df = df = pd.DataFrame({'value1':[500,415,293,126,115,140,90,190,217]})
# the first row will be NaN
# the first row of the df['value2'].shift() will be empty
# if you have a value for the first row you can fill it with .fillna(value for first row denomenator)
df['new_value'] = df['value1'] / df['value1'].shift() # .fillna(value of first denomenator)
df
Ответ №3:
Попробуйте разделить на сдвиг
from pandas import pandas as pd
final_df = pd.DataFrame({"Col1": [10, 20, 15, 30, 45],
"Col2": [13, 23, 18, 33, 48],
"nav": [3, 6, 9, 27, 108]},
index=pd.date_range("2020-01-01", "2020-01-05"))
final_df["change"] = final_df["nav"].div(final_df["nav"].shift(1))
print(final_df)
Col1 Col2 nav change
2020-01-01 10 13 3 NaN
2020-01-02 20 23 6 2.0
2020-01-03 15 18 9 1.5
2020-01-04 30 33 27 3.0
2020-01-05 45 48 108 4.0
Ответ №4:
Вам не нужно реализовывать функцию цикла для этого, используйте функцию pandas pct_change
df['nav'].pct_change()