Pandas 如何在python中应用窗口函数?
我有以下数据框示例:-即id、不同年份和季度的名称以及不同的值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 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对吧。。。但是你确实得到了你想要的结果——为什么它不正确?