在熊猫中按两列分组

时间:2019-03-07 14:34:25

标签: python pandas pandas-groupby

我有一个这样的数据框:

df = pd.DataFrame({'sym': list('aabaabab'), 'dir':[0,0,0,1,0,1,1,1], 'price': [100, 101, 102, 110, 120, 125, 200, 250]})

   dir  price sym
0    0    100   a
1    0    101   a
2    0    102   b
3    1    110   a
4    0    120   a
5    1    125   b
6    1    200   a
7    1    250   b

我想对sym以及一组0和1进行分组(不知道这是否是正确的说法!)。 我想要的结果看起来像这样:

   dir  price sym
0    0    100   a
1    0    101   a
3    1    110   a
   dir  price sym
4    0    120   a
6    1    200   a
   dir  price sym
2    0    102   b
5    1    125   b
7    1    250   b

每次dir在每个sym中都变为0,我想要一个新的组,其后的0为1

1 个答案:

答案 0 :(得分:2)

使用cumsum创建另一个帮助键,然后使用groupby

df['helpkey']=df.groupby('sym').apply(lambda x : ((x['dir']==1)&(x['dir'].shift(-1)==0)).shift().fillna(0).cumsum()).reset_index(level=0,drop=True)
d={x: y for x , y in df.groupby(['helpkey','sym'])}

for x , y in df.groupby(['helpkey','sym']):
 print(y)

  sym  dir  price helpkey
0   a    0    100       0
1   a    0    101       0
3   a    1    110       0
  sym  dir  price helpkey
2   b    0    102       0
5   b    1    125       0
7   b    1    250       0
  sym  dir  price helpkey
4   a    0    120       1
6   a    1    200       1