сгруппировать две колонны в пандах - PullRequest
1 голос
/ 07 марта 2019

У меня есть такой фрейм данных:

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 становится 0 в каждом sym Я хочу новую группу с 1 с после этого 0

1 Ответ

2 голосов
/ 07 марта 2019

Используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...