Наиболее вероятная ошибка в последней строке вашего примера
Вместо:
return [dataframe.get_group(d) for d in GICS_Sectors]
Вы должны написать:
return [dataframe.groupby('gsector').get_group(d) for d in GICS_Sectors]
Как вы упоминали ранее , вы хотите сгруппировать данные по столбцу «gsector». Тем не менее, это не было указано нигде в разрезанной. Я не на 100% это была ваша проблема - переменные Portfolio и Energy не были объявлены, поэтому я должен был догадаться.
Вот мой рабочий пример кода со случайными данными в кадре данных.
import pandas as pd
# Modified original function
def Sector_Subset(dataframe,GICS_Sectors):
"""
This function takes a dataframe and will pull sector specific data
to create a new dataframe for each eactor
Parameters:
dataframe = Portfolio
GICS_Sectors = Each 11 sectors
Return:
GICS_dataframe
Notes:
We want to do this so we can easily graph momentum separately to compare sectors
"""
dataframe[['datadate','GVKEY','trt1m',
'gsector','Start_Date','Rank_Percentile',
'Buy_Date','Sell_Date']]
# Below is the suspected error
return [dataframe.groupby('gsector').get_group(d) for d in GICS_Sectors]
# Original code
# return [dataframe.get_group(d) for d in GICS_Sectors]
# Example data
Portfolio = {'datadate':['2020-03-20', '2020-03-19', '2020-03-18', '2020-03-17'],
'GVKEY':[201, 211, 191, 181],
'trt1m':[202, 212, 192, 182],
'gsector':['Italy', 'Poland', 'Germany', 'Italy'],
'Start_Date':['2020-03-15', '2020-02-19', '2020-03-13', '2020-03-11'],
'End_Date':['2020-03-16', '2020-03-19', '2020-03-16', '2020-03-12'],
'Rank_Percentile':['30th', '40th', '45th', '29th'],
'Buy_Date':['2020-03-15', '2020-03-15', '2020-03-15', '2020-03-15'],
'Sell_Date':['2020-03-17', '2020-03-18', '2020-03-165', '2020-03-15']}
# Test the function
Portfolio = pd.DataFrame(Portfolio)
Energy = ['Italy', 'Poland', 'Germany']
Energy_Portfolio = Sector_Subset(Portfolio, Energy)
# Print results
for enrg in Energy_Portfolio:
print('\n')
print(enrg)