Python 如果值是第一次出现并在最近一年中出现,如何创建0或1

Python 如果值是第一次出现并在最近一年中出现,如何创建0或1,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个数据框,需要根据列值的新出现创建0和1的新列 数据帧输入: df = pd.DataFrame({'value_text': ['type1', 'type1', 'type1','type2','type2','type3','type3','type4','type4','type5','type6'], 'year': [2016,2017,2021,2018,2021,2019,2021,2020,2021,2021,2021]})

我有一个数据框,需要根据列值的新出现创建0和1的新列

数据帧输入:

df = pd.DataFrame({'value_text': ['type1', 'type1', 'type1','type2','type2','type3','type3','type4','type4','type5','type6'],
                   'year': [2016,2017,2021,2018,2021,2019,2021,2020,2021,2021,2021]})


     value_text  year
0       type1  2016
1       type1  2017
2       type1  2021
3       type2  2018
4       type2  2021
5       type3  2019
6       type3  2021
7       type4  2020
8       type4  2021
9       type5  2021
10      type6  2021
基于这一需要,考虑到本年度仅出现一次的值_文本,创建包含0和1的新列

在结果中,数据框type5仅在本年度出现,在前几年未出现。基本上,尝试识别新的事件并创建值1或0

结果:

df1 = pd.DataFrame({'value_text': ['type1', 'type1', 'type1','type2','type2','type3','type3','type4','type4','type5','type6'],
                   'year': [2016,2017,2021,2018,2021,2019,2021,2020,2021,2021,2021],
                   'value': [0, 0, 0,0,0,0,0,0,0,1,1]})
输出:

     value_text  year  value
0       type1  2016      0
1       type1  2017      0
2       type1  2021      0
3       type2  2018      0
4       type2  2021      0
5       type3  2019      0
6       type3  2021      0
7       type4  2020      0
8       type4  2021      0
9       type5  2021      1
10      type6  2021      1

我们可以使用
duplicated
创建布尔掩码
m1
,以识别未复制的值。类似地,通过将年份列与当前年份进行比较,创建另一个布尔掩码
m2
,现在获取
m1
m2
的逻辑
,并将结果分配给列

m1 = ~df['value_text'].duplicated()
m2 = df['year'].eq(pd.Timestamp('now').year)
df['value'] = (m1 & m2).view('i1')


为什么
type4
是1?您能把您的请求说得更清楚吗?您能扩展您的示例以显示另一种情况,其中当前年度条目的值为1,而当前年度条目的值为1的情况为负值吗?我认为,如果您在2021年有两个条目
type6
,那么它们的值将为0,但不清楚。@Steve感谢您的兴趣,更新了新示例。@sophocles感谢您的兴趣,更新了新示例
>>> df

   value_text  year  value
0       type1  2016      0
1       type1  2017      0
2       type1  2021      0
3       type2  2018      0
4       type2  2021      0
5       type3  2019      0
6       type3  2021      0
7       type4  2020      0
8       type4  2021      0
9       type5  2021      1
10      type6  2021      1