Вы должны быть в состоянии достигнуть этого, используя groupby и применять лямбда-операции в Pandas. Ниже приведен пример, который я нарисовал:
Рассмотрим следующие данные:
Country,Year,GDP
Chile,2011,1.5
Chile,2012,1
Chile,2013,2
Chile,2014,2.3
Chile,2015,3.2
Nigeria,2011,0.6
Nigeria,2012,0.9
Nigeria,2013,2.1
Nigeria,2014,2.2
Nigeria,2015,2.6
Australia,2011,10.4
Australia,2012,14.4
Australia,2013,12.3
Australia,2014,13.3
Australia,2015,15
Сначала мы применим операцию различий по стране:
df['diff'] = df.groupby("Country")["GDP"].transform(pd.DataFrame.diff)
Country Year GDP diff
0 Chile 2011 1.5 NaN
1 Chile 2012 1.0 -0.5
2 Chile 2013 2.0 1.0
3 Chile 2014 2.3 0.3
4 Chile 2015 3.2 0.9
5 Nigeria 2011 0.6 NaN
6 Nigeria 2012 0.9 0.3
7 Nigeria 2013 2.1 1.2
8 Nigeria 2014 2.2 0.1
9 Nigeria 2015 2.6 0.4
10 Australia 2011 10.4 NaN
11 Australia 2012 14.4 4.0
12 Australia 2013 12.3 -2.1
13 Australia 2014 13.3 1.0
14 Australia 2015 15.0 1.7
Затем мы можем сгенерировать логический столбец на основе наибольшего значения:
df['biggestDeltaYear'] = df.groupby("Country")['diff'].apply(lambda x:x==x.max())
Country Year GDP diff biggestDeltaYear
0 Chile 2011 1.5 NaN False
1 Chile 2012 1.0 -0.5 False
2 Chile 2013 2.0 1.0 True
3 Chile 2014 2.3 0.3 False
4 Chile 2015 3.2 0.9 False
5 Nigeria 2011 0.6 NaN False
6 Nigeria 2012 0.9 0.3 False
7 Nigeria 2013 2.1 1.2 True
8 Nigeria 2014 2.2 0.1 False
9 Nigeria 2015 2.6 0.4 False
10 Australia 2011 10.4 NaN False
11 Australia 2012 14.4 4.0 True
12 Australia 2013 12.3 -2.1 False
13 Australia 2014 13.3 1.0 False
14 Australia 2015 15.0 1.7 False
Фактические значения года также можно получить вместо логического значения, используя:
df['Year'][df.groupby("Country")['diff'].apply(lambda x:x==x.max())]
или
df.iloc[df.groupby("Country")['diff'].apply(lambda x:x.idxmax())]['Year']
НТН.