如何在python中应用窗口函数?

问题描述 投票:0回答:2

我有以下示例数据框: - i.c.e. 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

我必须确定名称+ id(主键)是否在年份之前出现,而quater具有值,然后将其视为现有(0),如果将来有值,之前没有任何内容,则将其视为新的(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
pandas window
2个回答
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
投票

您可以将duplicated与id,name和year的子集一起使用,然后将结果反转以标识第一次出现...,例如:

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

请注意,虽然这可以按照您的要求对您的数据进行处理,但您可能希望按年份(可能是季度)进行排序,以确保您的状态标记在同一年内和第一季度内正确显示。

© www.soinside.com 2019 - 2024. All rights reserved.