#python #python-3.x #pandas #dataframe
#python #python-3.x #pandas #фрейм данных
Вопрос:
Приведенный ниже скрипт получает биржевые данные и вычисляет статистику по разнице цен. Моя проблема заключается в правильном выполнении pivot Функция pivot работает, но она создает ненужные пустые ячейки. В идеале я хотел бы, чтобы pivot поворачивался, и все точки данных находились в одной строке.
import pandas as pd
import yfinance as yf
slv = yf.Ticker("SLV")
slvhist = slv.history(period="1mo")
slvhist['delta'] = slvhist['Close'] - slvhist['Open']
perc =[.25, .50, .75, .99]
include =['object', 'float', 'int']
slvhist['delta'].describe(percentiles = perc, include = include)
df2 = pd.DataFrame({'StockCompare': slvhist['delta'].describe(percentiles =
perc, include = include)})
df2.loc['stock'] = ['SLV']
df2['Metics'] = df2.index
df2 = df2.reset_index(drop=True)
dfp = df2.pivot(columns='Metics', values='StockCompare').assign(g = 0).groupby('g').max().reset_index().drop(columns='g')
Вот результат моей сводки. Значения разбросаны. Все они должны быть в строке 0 как 1 строка со всеми значениями.
Комментарии:
1. Пожалуйста, покажите примеры того, что возвращает ваш код и что вы ожидаете, что он вернет.
2. Спасибо, ipj да, это было то, что я искал.
Ответ №1:
Вы можете попробовать следующие преобразования:
dfp = df2.pivot(columns='Metics', values='StockCompare').assign(g = 0).groupby('g').max().reset_index().drop(columns='g')
Результат:
Metics 25% 50% 75% 99% count max mean min std
0 -0.12 0.14 0.425 1.385 23.0 1.55 0.031739 -1.9 0.69405
Это сделает статистику более читаемой.
Немного изменив предыдущий код, мы можем получить аналогичный результат еще проще:
df2 = pd.DataFrame({'StockCompare': slvhist['delta'].describe(percentiles = perc, include = include)})
df2.T
вывод:
count mean std min 25% 50% 75% 99% max
StockCompare 23.0 0.031739 0.69405 -1.9 -0.12 0.14 0.425 1.385 1.55