2013-02-19 52 views
6

假设dfpandas数据帧。我想根据一些标准将它分成两个数据框。我发现这样做的最好的方法是一样的东西如何根据布尔标准分割数据框?

df0, df1 = [v for _, v in df.groupby(df['class'] != 'special')] 

在上面的例子中,标准是参数的groupby方法。得到的df0由子数据帧组成,其中class字段具有'special'df1基本上是df0的补充。 (不幸的是,用该构建体,其由物品的子数据帧的是失败首先返回的标准,这是不直观的。)

上述构建体具有的缺点是它没有特别的可读的,当然不是为可读的,例如,一些假设splitby方法类似

df0, df1 = df.splitby(df['class'] == 'special') 

由于分裂这样一个数据帧是我经常需要做的,我想可能有一个内置的功能,或可能建立的成语,为此。如果是这样,请让我知道。

回答

6

我认为最可读的方式就是要做到这一点:

df0 = df[df.class != 'special'] 
df1 = df[df.class == 'special'] 

我还没有碰到过这种特殊的方法来... ...

+3

我可能会做'd =字典( list(df.groupby(df [“class”]!=“b”)))'然后用'd [0]'/'d [False]'和'd [1]'/'d [True]相反。 – DSM 2013-02-19 12:25:11

+0

@DSM事实上,groupby可能是更好的存储方式(!) – 2013-02-19 12:27:55

+0

@AndyHayden:你是什么意思?如果只能通过其(伪)键来处理groupby的内容,那将是非常好的,但它不起作用;即'df.groupby(df.class!='b')[True]'抛出一个错误......我不知道如何做这种事情,而不将groupby对象转换为字典... – kjo 2013-02-19 14:48:08