熊猫:如何基于系列模式进行分组

时间:2019-07-21 10:02:30

标签: python pandas pandas-groupby

具有以下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

谢谢!

2 个答案:

答案 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