如何从Pandas dataFrame返回groupby值?

时间:2014-05-14 16:30:17

标签: python matplotlib pandas

我有一个dataFrame我已经汇总了一些数据,我正在绘制它。我想从groupby字段中获取值以用作图中的标签。

以下是我汇总的dataFrame:

code_values = code_graph.groupby(['code_desc']).agg({'product_id': pd.Series.nunique })

返回:

print code_values
                          product_id
code_desc                          
Product 1                         30
Product 2                         40
Product 3                         50
Product 4                         60

当我尝试访问code_desc字段以在matplotlib图中用作我得到的标签时:

print code_values['code_desc']
KeyError: u'no item named code_desc'

如何获取code_desc的值?

3 个答案:

答案 0 :(得分:2)

从聚合值中,您应该可以使用:

code_values.index

您还可以获取groupby对象的groups字典的键,如:

grouped = code_graph.groupby(['code_desc'])
code_desc = grouped.groups.keys()

答案 1 :(得分:1)

如果您想以值的形式访问它们,它们可能不再是您的索引。最后考虑

code_values.reset_index(inplace=True)
print code_values['code_desc']

但是,很多内置visualization tools of pandas实际上会根据您的索引绘制值。那么,也许你想保留索引,但看看这些?

答案 2 :(得分:0)

使用索引作为单级索引。如果你有一个多级索引,你可以通过索引级别获取索引值。

 txt="""code_desc,product_id
 Product 1,                         30
 Product 1,                         70
 Product 2,                         40
 Product 3,                         50
 Product 4,                         60"""

 from io import StringIO
 f = StringIO(txt)
 df = pd.read_table(f,sep =',')

 grouped = df.groupby(['code_desc']).agg({'product_id': pd.Series.nunique })
 labels=grouped.index
 print(labels)

输出:

 Index(['Product 1', 'Product 2', 'Product 3', 'Product 4'], dtype='object', name='code_desc')