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

Pandas 如何在python中应用窗口函数?,pandas,window,Pandas,Window,我有以下数据框示例:-即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(主键)是否为 在具有价值的年度和季度之前出现过,然后将其视为现有(0),如果未来有价值且之前没有任何内容,则

我有以下数据框示例:-即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(主键)是否为 在具有价值的年度和季度之前出现过,然后将其视为现有(0),如果未来有价值且之前没有任何内容,则将其视为新的(1)

我相信需要通过
~
反转布尔掩码并转换为
整数

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
我相信需要通过
~
反转布尔掩码并转换为
整数

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

您可以使用id、name和year的子集使用
duplicated
,然后反转结果以识别第一次出现…,例如:

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

请注意,虽然这将对按显示顺序排列的数据起作用,但您可能希望按年份(可能是季度)排序,以确保您的状态标志位于同一年内,并正确显示第一个季度。

您可以使用带有id、名称和年份子集的
duplicated
,然后反转结果以识别第一次出现。。。,例如:

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

请注意,虽然这可以处理按显示顺序排列的数据,但您可能希望按年度(可能是季度)排序确保您的状态标志在同一年内正确显示到第一季度。

您说在本年和本季度之前出现过,但您的输出似乎只是名称在本年和本季度出现过?您说在本年和本季度之前出现过,但您的输出似乎只是名称在本年和本季度出现过年份?这不正确,我更改了数据位以更好地解释它,请cld uhelp@user3222101-不是100%确定,但需要
(df.duplicated(['id','name','year','quater',keep=False)| ~df.duplicated(['id','name','year'))。astype(int)
?这不正确,我更改了数据位以更好地解释它,请给我打电话help@user3222101-不是100%确定,但需要
(df.duplicated(['id','name','year','quater',keep=False)| ~df.duplicated(['id','name','year']))。astype(int)
?这不正确,我更改了数据位以更好地解释它,请cld uhelp@user3222101这个额外的行是如何准确地进入您的输出的?你需要解释一下…@user322101对吧。。。但是你得到了你想要的结果-为什么不正确?这是不正确的,我更改了数据位以更好地解释它,请cld uhelp@user3222101这个额外的行是如何准确地进入您的输出的?你需要解释一下…@user322101对吧。。。但是你确实得到了你想要的结果——为什么它不正确?