Вы можете сделать это с помощью свойства 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
Надеюсь, это решит вашу проблему.