как разделить df[‘2’] на df [‘1’] по всему столбцу в фрейме данных?

#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()