我有一个数据框,其中我需要识别重复前几年的条目。
输入:
df1 = pd.DataFrame({'type': ['cst1', 'cst1', 'cst2','cst1','cst2','cst3','cst2','cst1','cst2','cst4','cst5','cst3'],
'year': [2017, 2017, 2017,2018,2018,2018,2018,2019,2019,2019,2019,2020]})
type year
0 cst1 2017
1 cst1 2017
2 cst2 2017
3 cst1 2018
4 cst2 2018
5 cst3 2018
6 cst2 2018
7 cst1 2019
8 cst2 2019
9 cst4 2019
10 cst5 2019
11 cst3 2020从上面的数据中,按年份比较类型,并确定哪些条目不是新条目。
例:第一个2017年,因为是开始的一年,所以所有条目都被认为是新的,当2018年识别重复时,需要与2017年的所有条目进行比较,cst1和cst2都是重复的。2019年应包括2018年和2017年的所有条目,以识别重复项。
output:
type year status
0 cst1 2017 0
1 cst1 2017 0
2 cst2 2017 0
3 cst1 2018 1
4 cst2 2018 1
5 cst3 2018 0
6 cst2 2018 1
7 cst1 2019 1
8 cst2 2019 1
9 cst4 2019 0
10 cst5 2019 0
11 cst3 2020 1在2020年的输出中,即使2019年不包含类型cst3,cst3也被标识为重复的。虽然比较每个增加的年份都需要考虑过去的所有年份来标识重复项,但在这里2018具有类型cst3,因此它被标识为重复项并标记为1
发布于 2021-04-26 14:17:08
您可以获取每个组的最小年份,然后检查数据框中的行是否在这些最小值中:
pd.merge(df1, df1.groupby("type").min().reset_index(), "outer", indicator = "status")\
.replace({"status": {"both": 0, "left_only": 1}}) 输出
type year status
0 cst1 2017 0
1 cst1 2017 0
2 cst2 2017 0
3 cst1 2018 1
4 cst2 2018 1
5 cst2 2018 1
6 cst3 2018 0
7 cst1 2019 1
8 cst2 2019 1
9 cst4 2019 0
10 cst5 2019 0
11 cst3 2020 1文档
https://stackoverflow.com/questions/67261418
复制相似问题