首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pandas数据框中通过与前几年的比较找到重复的值和标签值

在pandas数据框中通过与前几年的比较找到重复的值和标签值
EN

Stack Overflow用户
提问于 2021-04-26 13:47:14
回答 1查看 55关注 0票数 0

我有一个数据框,其中我需要识别重复前几年的条目。

输入:

代码语言:javascript
复制
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年的所有条目,以识别重复项。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2021-04-26 14:17:08

您可以获取每个组的最小年份,然后检查数据框中的行是否在这些最小值中:

代码语言:javascript
复制
pd.merge(df1, df1.groupby("type").min().reset_index(), "outer", indicator = "status")\
    .replace({"status": {"both": 0, "left_only": 1}}) 

输出

代码语言:javascript
复制
    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

文档

  1. pandas.DataFrame.groupby
  2. pandas.merge
  3. pandas.DataFrame.replace
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67261418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档