Поэлементное разделение в фрейме данных pandas с помощью «/»?

#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
  

Здесь есть две вещи, которые кажутся странными:

  1. Мои числитель и знаменатель равны 10 x 9. Почему выходные данные имеют размер 10 x 10, а первый столбец равен nans.

  2. Почему все результаты равны 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 совпадение.