首页 > 解决方案 > 根据上一行将列值增加 1

问题描述

我有一个如下所示的熊猫数据框:

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

标签: python-3.xpandas

解决方案


使用cumsumwithgroupby和一些计算技巧

df['cumsum'] = df.groupby(['group'])['var_1'].cumsum()
df_first = df.groupby(['group']).agg({'var_1': 'first', 'var_2': 'first'}).reset_index().rename(columns={'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
Name: res, dtype: int64

df_first获得两个var_1var_2每个组的第一个值。您需要第一个值var_2作为要增加的基值。如果第一行是 1 ,您还需要第一个值var_1来取消cumsumvar_1


推荐阅读