我有一个这样的数据框:
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
答案 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