Создание фреймов данных из фрейма групповых данных - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть DataFrame , содержащий данные о запасах, и я хочу перебрать его, чтобы создать один df для каждого тикера (например, PETR4.SA). Я сделал это вручную с groupby и .get_group, но я не знаю, как это сделать с for или def. Код прямо сейчас:

import pandas as pd
import yfinance as yf
import pandas_datareader.data as pdr

yf.pdr_override()
tickers = ['PETR4.SA', 'FLRY3.SA', 'ODPV3.SA', 'CREM3.SA', 'BPHA3.SA']
acoes = pdr.get_data_yahoo(tickers) 

# This line until the end  is to transform the multiindex of tickers into a column
acoes.index.name = 'date'  
long_form = acoes.reset_index().melt('date', var_name=['var','ticker'])  
df = long_form.pivot_table(index=['date', 'ticker'], columns='var', values='value').reset_index()

# Grouping the df by tickers
grupos = DF.groupby('ticker')
grupos.groups # The groups are presented in dicts, don't know if this helps or not

1 Ответ

0 голосов
/ 22 апреля 2020

Вы можете сделать это с помощью свойства groups groupby. группы возвращают Dict {имя группы -> метки группы} .

import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

Теперь примените groupby:

>>> grouped = df.groupby('Year')


>>> grouped.groups
{2014: Int64Index([0, 2, 4, 9], dtype='int64'),
 2015: Int64Index([1, 3, 5, 10], dtype='int64'),
 2016: Int64Index([6, 8], dtype='int64'),
 2017: Int64Index([7, 11], dtype='int64')}

, теперь вы можете выполнять итерации по этим группам, и вы может создать отдельный DataFrame для каждой группы.

>>> a = [grouped.get_group(group) for group in grouped.groups]

теперь a содержит отдельный DataFrame для каждого года.

>>>a[0]
Team    Rank    Points
0   Riders  1   876
2   Devils  2   863
4   Kings   3   741
9   Royals  4   701


>>> type(a[0])
pandas.core.frame.DataFrame

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...