2017-03-08 80 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

相关问题