2017-03-08 81 views
2

我正嘗試基於列類別(A,B和C)中的分類值從現有數據框df創建新的數據框df_A,df_B和df_C。基於現有python熊貓列的新數據框

這不起作用

df_A = {n: df.ix[rows] 
for n, rows in enumerate(df.groupby('Category').groups)} 

在這裏,我得到的錯誤 「主要錯誤:」

(注:A是其中一類)

這不起作用無論是

df_A = np.where(df['Category']=='A')).copy() 

在這裏,我得到的錯誤: 「語法錯誤」

最後,這是行不通

df_A = np.where(raw[raw['Category']=='A']).copy() 

「AttributeError的: '元組' 對象有沒有屬性 '複製'」

謝謝

+1

發佈錯誤。 – Denziloe

+0

我在代碼中也看不到「df」。 – Denziloe

+0

對不起,有df作爲數據;我改變了這一點,錯誤已經包括在內;謝謝 – jeangelj

回答

1

看來你需要先boolean indexing因爲Category是列,而不是index如果需要字典:

df2 = {n: data[ data['Category'] == rows] 
      for n, rows in enumerate(data.groupby('Category').groups)} 

或者嘗試刪除groups

df2 = {n: rows[1] for n, rows in enumerate(data.groupby('Category'))} 

樣品:

data = pd.DataFrame({'Category':['A','A','D'], 
        'B':[4,5,6], 
        'C':[7,8,9]}) 

print (data) 
    B C Category 
0 4 7  A 
1 5 8  A 
2 6 9  D 

df2 = {n: rows[1] for n, rows in enumerate(data.groupby('Category'))} 
print (df2) 
{0: B C Category 
0 4 7  A 
1 5 8  A, 1: B C Category 
2 6 9  D} 

df2 = {n: data[ data['Category'] == rows] 
      for n, rows in enumerate(data.groupby('Category').groups)} 
print (df2) 
{0: B C Category 
0 4 7  A 
1 5 8  A, 1: B C Category 
2 6 9  D} 

解決方案,而groupby

df2 = {n: data[data['Category'] == rows] for n, rows in enumerate(data['Category'].unique())} 
print (df2) 
{0: B C Category 
0 4 7  A 
1 5 8  A, 1: B C Category 
2 6 9  D} 

print (df2[0]) 
    B C Category 
0 4 7  A 
1 5 8  A 

但是,如果需要通過Category選擇DataFrame字典值:

dfs = {n: rows for n, rows in data.groupby('Category')} 
print (dfs) 
{'A': B C Category 
0 4 7  A 
1 5 8  A, 'D': B C Category 
2 6 9  D} 

print (dfs['A']) 
    B C Category 
0 4 7  A 
1 5 8  A 
+0

謝謝,但是這不會創建字典而不是新的數據框?如果我有3個類別,我想創建3個數據框,所以df_A用於類別A,df_B用於類別B等。 – jeangelj

+0

請檢查編輯答案。 – jezrael

+0

謝謝 - dfs是一本詞典,我如何根據類別製作個別熊貓數據框? – jeangelj

相關問題