#python #pandas
#python #pandas
Вопрос:
Было бы здорово понять, как это на самом деле работает. Возможно, в Python / Pandas есть что-то, чего я не совсем понимаю.
У меня есть фрейм данных (данные о ценах), и я хотел бы рассчитать доходность. Строки — это запасы, а столбцы — даты.
Для простоты я создал цены с некоторыми случайными числами.
import pandas as pd
import numpy as np
df_price = pd.DataFrame(np.random.rand(10,10))
df_ret = df_price.iloc[:,1:]/df_price.iloc[:,:-1]-1
Здесь есть две вещи, которые кажутся странными:
-
Мои числитель и знаменатель равны 10 x 9. Почему выходные данные имеют размер 10 x 10, а первый столбец равен nans.
-
Почему все результаты равны 0, кроме того, что первые столбцы являются nans. т. е. почему вычисление не выполнено?
Спасибо.
Ответ №1:
Когда мы выполняем div, нам нужно сначала рассмотреть index
и columns
для обоих совпадений df_price[:,1:]
и df_price.iloc[:,:-1]
, поэтому нам нужно добавить .values
, чтобы сначала удалить совпадение индекса и столбца, тогда выходные данные будут выполнять то, что мы ожидали.
df_ret = df_price.iloc[:,1:]/df_price.iloc[:,:-1].values-1
Пример
s=pd.Series([2,4,6])
s.iloc[1:]/s.iloc[:-1]
Out[54]:
0 NaN # here the index s.iloc[:-1] included
1 1.0
2 NaN # here the index s.iloc[1:] included
dtype: float64
Исходя из вышесказанного, мы можем сказать, что объект pandas сначала соответствует индексу, и это больше похоже на outer
совпадение.