2013-02-19 48 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