python-3.x - 根据上一行将列值增加 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
解决方案
使用cumsum
withgroupby
和一些计算技巧
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_1
和var_2
每个组的第一个值。您需要第一个值var_2
作为要增加的基值。如果第一行是 1 ,您还需要第一个值var_1
来取消cumsum
var_1
推荐阅读
- apache-kafka - 当集群中的 4 个代理中有 3 个代理时,kafka 主题创建失败
- javascript - 在页面加载时默认显示内容?
- apache-spark - 如何在 PySpark 中创建具有偏移量的 DStream(使用 KafkaUtils.createDirectStream)?当kafka是集群时?
- python - 迁移错误'没有迁移应用'也没有在 django 的 postgresql 中添加表
- apache-camel - 如何在apache骆驼的URL中使用“移动”时重命名文件
- jquery - 如何水平滚动要放置在右侧的 div?
- java - Java-无法将 1000 批插入表中
- c++ - 解决产生无限循环的数组问题时遇到问题
- emacs - Emacs Diary 的 diary-float 查询
- sql - SQL Group By 和更改分组值