在Python中基于groupby创建新变量

时间:2016-07-07 08:21:17

标签: python pandas

我有一个数据框如下:

I / P:

id       day  start location    value   match
4413869 16080   360 5000    2   1
4413869 16080   360 5000    3   1
4413869 16080   360 5000    5   1
4413869 16080   360 5000    16  1
4413869 16080   360 5015    1   1
4413869 16080   361 -1      1   0
4413869 16080   361 -1      2   0
4413869 16080   361 -1      3   0
4413869 16080   361 -1      5   0
4413869 16080   361 -1      16  0
4413869 16080   362 -1      1   0
4413869 16080   362 -1      2   0
4413869 16080   362 -1      3   0
4413869 16080   362 -1      5   0
4413869 16080   362 -1     16   0
4413869 16080   363 -1     1    0
4413869 16080   363 -1     2    0
4413869 16080   363 -1     3    0
4413869 16080   363 -1     5    0
4413869 16080   363 -1     16   0
4413869 16080   364 -1     1    0
4413869 16080   364 -1     2    0
4413869 16080   364 -1     3    0
4413869 16080   364 -1     5    0
4413869 16080   364 -1     16   0

我需要执行以下操作来获取我的O / P:

  1. 循环遍历id + day + start + location
  2. 的组合(组)
  3. 如果位置位于组的顶部/第一个,则new_var = 0
  4. 如果该组中的匹配为1(从第一个开始),则new_var = new_var + 1
  5. 此增量应该一直持续到该组的最后一个位置。
  6. 将该组的最后一条记录写入输出。
  7. O / P:

    id       day  start loc     value match new_var
    4413869 16080   360 5000    16      1   4
    4413869 16080   360 5015    1       1   1
    4413869 16080   361 -1      16      0   0
    4413869 16080   362 -1      16      0   0
    4413869 16080   363 -1      16      0   0
    4413869 16080   364 -1      16      0   0
    

    我知道我可以逐个功能使用,但不能想到如何以技术方式迭代和增量。

    任何人都可以指导我吗?

    感谢。

1 个答案:

答案 0 :(得分:0)

cumsum

中使用match而不是groupby
df['new_var'] = df.groupby(['id', 'day', 'start', 'location']).match.cumsum()
df.head()

enter image description here

然后在另一个last

中使用groupby
df.groupby(['id', 'day', 'start', 'location'], as_index=False).last()

enter image description here