pandas 如何创建按连续行分组的输出?即:[2002、2003、2004] [2006、2007]、[2011]、[2013、2014]

5cg8jx4n  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(40)

这是我正在研究的一小部分

data = {
    'country_name' : ['Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Albania', 'Albania', 'Albania'],
    'year' : [2017, 2018, 2019, 2021, 2022, 2023, 2007, 2009, 2010],
    'score' : [2.6617181301116943, 2.694303274154663, 2.375091791152954, 2.4360344409942627, 1.2812711000442505, 1.8589999675750732, 4.634251594543457, 5.485469818115234, 5.268936634063721]}
df = pd.DataFrame(data)

Dataframe
我想找出一个国家和连续x年的分数之差。如果x = 1,那么输出应该是这样的。
Desired Output
因此,如果同一个国家有一个跳过的年份,那么下一个记录的年份将不会有可用的差异。有一年独立的国家也不会有区别。
我也打算对x = 2,3,4等做同样的事情

vmjh9lq9

vmjh9lq91#

按连续年份创建组,比较Series.diffSeries.ne以及Series.cumsum的累积和,并将其用于DataFrameGroupBy.diff的差异:

x = 1
df['diff']=df.groupby(['country_name',df['year'].diff().ne(1).cumsum()])['score'].diff(x)

x = 2
df['diff2']=df.groupby(['country_name',df['year'].diff().ne(1).cumsum()])['score'].diff(x)
print(df)
  country_name  year     score      diff     diff2
0  Afghanistan  2017  2.661718       NaN       NaN
1  Afghanistan  2018  2.694303  0.032585       NaN
2  Afghanistan  2019  2.375092 -0.319211 -0.286626
3  Afghanistan  2021  2.436034       NaN       NaN
4  Afghanistan  2022  1.281271 -1.154763       NaN
5  Afghanistan  2023  1.859000  0.577729 -0.577034
6      Albania  2007  4.634252       NaN       NaN
7      Albania  2009  5.485470       NaN       NaN
8      Albania  2010  5.268937 -0.216533       NaN

相关问题