如何在python中应用窗口功能?

时间:2018-08-31 06:49:06

标签: pandas window

在下面的示例数据框中,我的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

2 个答案:

答案 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

请注意,虽然这将对按顺序显示的数据起作用,但您可能希望按年份(甚至是季度)进行排序,以确保状态标记在同一年内显示到正确显示的第一季度。