Python 3.x 基于上一行将列值增加1
我有一个熊猫数据框,如下所示:Python 3.x 基于上一行将列值增加1,python-3.x,pandas,Python 3.x,Pandas,我有一个熊猫数据框,如下所示: data=[['A',1,30], ['A',1,2], ['A',0,4], ['A',1,4], ['B',0,5], ['B',1,1], ['B',0,5], ['B',1,8]] df = pd.DataFrame(data,columns=['group','var_1','var_2']) 我想根据以下条件创建一系列具有索引的值: 步骤1)增量应始终从每组“var
data=[['A',1,30],
['A',1,2],
['A',0,4],
['A',1,4],
['B',0,5],
['B',1,1],
['B',0,5],
['B',1,8]]
df = pd.DataFrame(data,columns=['group','var_1','var_2'])
我想根据以下条件创建一系列具有索引的值:
步骤1)增量应始终从每组“var_2”的第一行开始。例如:对于A组,增量应从30开始,对于B组,增量应从5开始
步骤2)递增值,其中“var_1”=1
我的期望输出:
0 30
1 31
3 32
5 6
7 7
与groupby一起使用
和一些计算技巧
df['cumsum']=df.groupby(['group'])['var_1'].cumsum()
df_first=df.groupby(['group']).agg({'var_1':'first','var_2':'first'}).reset_index().rename(列={'var_1':'first_var_1','var_2':'first_var_2'})
df=df.merge(df_first,on='group')
df['res']=df['first_var_2']+df['cumsum']-df['first_var_1']
res=df[df['var_1']==1]['res']
0 30
1 31
3 32
5 6
7 7
名称:res,数据类型:int64
df_first
获取每组var_1
和var_2
上的第一个值。如果var_1
的第一行为1,则需要var_1
的第一个值来抵消cumsum