Python panas groupby并对照上一行/下一行进行检查
我将某些数据分配到年份中,有时由于时间原因,它落在错误的年份,需要手动更正数据。(长话短说)请参见下面的示例,这样更容易理解:Python panas groupby并对照上一行/下一行进行检查,python,pandas,group-by,pandas-groupby,row,Python,Pandas,Group By,Pandas Groupby,Row,我将某些数据分配到年份中,有时由于时间原因,它落在错误的年份,需要手动更正数据。(长话短说)请参见下面的示例,这样更容易理解: import pandas as pd years=[2000,2001,2002,2003,2004,2005,2000,2001,2002,2003,2004,2005] symbols=['ABC','ABC','ABC','ABC','ABC','ABC', 'DEF','DEF','DEF', 'DEF','DEF','DEF'] c=[3, 3, 2, 4
import pandas as pd
years=[2000,2001,2002,2003,2004,2005,2000,2001,2002,2003,2004,2005]
symbols=['ABC','ABC','ABC','ABC','ABC','ABC', 'DEF','DEF','DEF', 'DEF','DEF','DEF']
c=[3, 3, 2, 4, 3, 3, 3, 3, 4, 2, 3, 3]
df= pd.DataFrame({'y':years, 'g':symbols, 'count':c})
y g count
0 2000 ABC 3
1 2001 ABC 3
2 2002 ABC 2
3 2003 ABC 4
4 2004 ABC 3
5 2005 ABC 3
6 2000 DEF 3
7 2001 DEF 3
8 2002 DEF 4
9 2003 DEF 2
10 2004 DEF 3
11 2005 DEF 3
我希望我的输出像这样
(这意味着我想将2003年的第一次ABC观察转移到2002年,将2002年的最后一次DEF观察转移到2003年)
我不知道如何编写代码来比较每一行与前一行和下一行,同时按……分组。我找到了如何按groupby()执行我想执行的操作。shift()
模式不清楚…如果上一行.C<当前行.C和下一行.C>当前行.C,那么做点什么…还没有清理。。。。
y g count result
0 2000 ABC 3
1 2001 ABC 3
2 2002 ABC 2
3 2003 ABC 4 2002
4 2004 ABC 3
5 2005 ABC 3
6 2000 DEF 3
7 2001 DEF 3
8 2002 DEF 4 2003
9 2003 DEF 2
10 2004 DEF 3
11 2005 DEF 3
df['prev']=df.groupby(['g'])['count'].shift(1)
df['next']=df.groupby(['g'])['count'].shift(-1)