枚举分组的熊猫数据框

时间:2018-12-18 00:51:33

标签: pandas data-manipulation

我有一个熊猫数据框,其中每一行都是一个子序列。我要执行以下操作;

  1. 按“ SN”对数据进行分组,然后按“日期”对每个组进行排序。
  2. 创建一个名为“步骤”的附加列,该列基于此条件从0到n(0:n)的每个组中的行的枚举:在每个有序组中,从0开始枚举,直到“事件”等于1,在每个组中重复一次。每当“ SN”更改时,始终重新启动枚举。请进一步参考代码和示例图片,以进一步了解...谢谢大家!

下面的代码创建原始数据

data = {'date':['1/1/18', '1/2/18', '1/3/18', '1/1/18', '1/2/18', '2/2/18', 2/3/18', '2/4/18', '2/4/18', '2/4/18', '2/5/18'],
        'SN': ['111', '111', '111', '222', '222','222', '333', '333', '333', '444', '444'],
        'feat1': [1,2,3,4,5,6,7,8,9,10,11],
        'event':[0,0,1,0,1,0,0,1,0,0,1]}

orig_data = pd.DataFrame(data)

orig_data: enter image description here

所需的输出如下:

enter image description here

1 个答案:

答案 0 :(得分:2)

IIUC,您可以尝试一下;

编辑

orig_data['steps_'] = orig_data.groupby(['SN',(1 == orig_data['event'].shift(1)).cumsum()]).cumcount()

print(orig_data)

     SN    date  event  feat1  steps_
0   111  1/1/18      0      1       0
1   111  1/2/18      0      2       1
2   111  1/3/18      1      3       2
3   222  1/1/18      0      4       0
4   222  1/2/18      1      5       1
5   222  2/2/18      0      6       0
6   333  2/3/18      0      7       0
7   333  2/4/18      1      8       1
8   333  2/4/18      0      9       0
9   444  2/4/18      0     10       0
10  444  2/5/18      1     11       1

注意;我省略了'date'上的groupby,因为按'date'排序会给'333'带来麻烦。 '2/4/18'给出两次,那么哪个先出现?