Python 如果值是第一次出现并在最近一年中出现,如何创建0或1
我有一个数据框,需要根据列值的新出现创建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]})
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