具有以下df:
pd.DataFrame({'bool':[True,True,True, False,True,True,True],
'foo':[1,3,2,6,2,4,7]})
结果为:
bool foo
0 True 1
1 True 3
2 True 2
3 False 6
4 True 2
5 True 4
6 True 7
如何groupby
分为两组,在[0:2]
中具有索引group 1
,在[4:6]
中具有group 2
?
所需的输出: 组1:
bool foo
0 True 1
1 True 3
2 True 2
group2:
4 True 2
5 True 4
6 True 7
谢谢!
答案 0 :(得分:3)
您可以做到:
import numpy as np
x = df[df["bool"]].index.values
groups = np.split(x, np.where(np.diff(x)>1)[0]+1)
df_groups = [df.iloc[gr, :] for gr in groups]
输出看起来像:
df_groups[0]
Out[56]:
bool foo
0 True 1
1 True 3
2 True 2
df_groups[1]
Out[57]:
bool foo
4 True 2
5 True 4
6 True 7
答案 1 :(得分:1)
这是一种简单的方法:
# Split the dataframe by `Series` using `cumsum`
g =(~data['bool']).cumsum().where(data['bool'])
dfs= {'group_'+str(i+1):v for i, (k, v) in enumerate(data[['foo']].groupby(g))}
您可以使用'group_'+str(i+1)
,group_1
,.. etc等键group_2
访问每个数据帧:
print(dfs['group_1'])
foo
0 1
1 3
2 2