我正在尝试根据列类别(A,B和C)中的分类值从现有数据帧df创建新的数据帧df_A,df_B和df_C。
这不起作用
df_A = {n: df.ix[rows]
for n, rows in enumerate(df.groupby('Category').groups)}
这里我收到错误“Key Error:A”
(注:A是其中一个类别)
这不起作用
df_A = np.where(df['Category']=='A')).copy()
这里我收到错误:“语法错误”
最后,这不起作用
df_A = np.where(raw[raw['Category']=='A']).copy()
“AttributeError:'tuple'对象没有属性'copy'”
谢谢
答案 0 :(得分: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
但如果需要按DataFrame
值选择Category
的词典:
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