在下面的示例数据框中,我的ID为:即ID,不同年份的名称和具有不同值的四分之一
id name year quater value
1 bn 2017 2
1 bn 2017 3 4.5
1 bn 2017 4
2 an 2018 1 2.3
2 an 2018 2 3.3
2 an 2018 3 4.5
我必须确定name + id(主键)是否存在 在一年之前出现并具有价值的四分之一,然后将其视为现存(0),如果将来有价值,并且在此之前没有任何东西,则将其视为new(1)。
id name year quater value status
1 bn 2017 2 1
1 bn 2017 3 4.5 0
1 bn 2017 4 0
2 an 2018 1 2.3 1
2 an 2018 2 3.3 0
2 an 2018 3 4.5 0
答案 0 :(得分:1)
我认为需要duplicated
并用~
反转布尔掩码并将其转换为integer
:
df['status'] = (~df['name'].duplicated()).astype(int)
#if multiple columns
#df['status'] = (~df.duplicated(['id','name'])).astype(int)
print (df)
id name year quater value status
0 1 bn 2017 2 NaN 1
1 2 an 2018 1 2.3 1
2 2 an 2018 2 3.3 0
3 2 an 2018 3 4.5 0
答案 1 :(得分:1)
您可以将duplicated
与ID,名称和年份的子集一起使用,然后将结果求反以标识首次出现的情况...,例如:
df['status'] = (~df.duplicated(subset=['id', 'name', 'year'])).astype(int)
给你:
id name year quater value status
0 1 bn 2017 2 NaN 1
1 2 an 2018 1 2.3 1
2 2 an 2018 2 3.3 0
3 2 an 2018 3 4.5 0
请注意,虽然这将对按顺序显示的数据起作用,但您可能希望按年份(甚至是季度)进行排序,以确保状态标记在同一年内显示到正确显示的第一季度。