Pandas组如果变量可以按连续顺序排列



我有一个如下形式的数据集。

id  year
0  A  2000
1  A  2001
2  B  2005
3  B  2006
4  B  2007
5  C  2003
6  C  2004
7  D  2002
8  D  2003

现在,如果两个或多个ID可以按连续顺序排列,则假设它们是聚合ID的一部分。这意味着最终我希望有这样的分组,其中A&D组建一个小组;C另一个:

id  year  match
0  A  2000   1 
1  A  2001   1
7  D  2002   1
8  D  2003   1
5  C  2003   2
6  C  2004   2
2  B  2005   2
3  B  2006   2
4  B  2007   2

编辑:处理@Dimitris_ps评论:假设增加一行

id  year
9  A  2002

会将所需结果更改为

id  year  match
0  A  2000   1 
1  A  2001   1
9  A  2002   1
5  C  2003   1
6  C  2004   1
2  B  2005   1
3  B  2006   1
4  B  2007   1
7  D  2002   2
8  D  2003   2

因为现在对于a&D,而不是A、C和B,其中D没有匹配项。

id重新编码为值,然后可以根据yearid进行排序。

import pandas as pd
df = pd.DataFrame({'id':['A', 'A', 'B', 'B', 'B', 'C', 'C', 'D', 'D'], 
'year':[2000, 2001, 2005, 2006, 2007, 2003, 2004, 2002, 2003]}) # example dataframe
# Create a dict mapping id to values based on the minimum year
custom_dict = {el:i for i, el in enumerate(df.groupby('id')['year'].min().sort_values().index)}
# and the reverse to map back the values to the id
custom_dict_rev = {v:k for k, v in custom_dict.items()}
df['id'] = df['id'].map(custom_dict) 

df = df.sort_values(['year', 'id'])
df['id'] = df['id'].map(custom_dict_rev)
df

最新更新