遍历熊猫的groupby字段

路卡

我一直在研究熊猫的公开数据集,其中包含美国各州的一些空气质量统计数据。

我将其数据集加载到pandas数据框中,并使用groupby来对事物进行分组state所以像:

import pandas as pd
poll = pd.read_csv(`dataset.csv')
poll = poll.groupby(['State', 'Date Local']).mean()
ds_gb_state = poll.groupby(level='State')

打印此内容类似于:

                        V1         V2          V3        V4
State      Date Local
Alabama    2013-12-01  37.000000  24.000000   1.000000   6.000000
           2013-12-02  30.000000  12.000000   3.000000   6.000000
           2013-12-03  21.000000  11.000000   3.000000   3.000000
           2013-12-04  18.000000  13.000000   1.000000   2.000000
           2013-12-05  15.000000  13.000000   1.000000   2.000000
Alaska     2014-07-01   4.000000  16.000000   6.000000   3.000000
           2014-07-02   4.000000  15.000000   6.000000   3.000000
           2014-07-03   6.000000  19.000000  13.000000   3.000000

我的问题很简单。使用该ds_gb_state对象,如何找到所有状态的名称?在此对象中,列是V1, V2, V3 and V4,我可以很好地访问它们,但是是否可以枚举所有状态或从该对象中找到最小和最大日期?

海盗

a的主要组成部分pandas.MultiIndexlevelslabels属性。构造一个时,levelsFrozenListpandas.Index对象的。更重要的是,这些Index对象应该是唯一的(这可以被故意破坏,但通常是True)。因此,您可以使用

ds_gb_state.index.levels[0]

Index(['Alabama', 'Alaska'], dtype='object', name='State')

假设第二级是dtype datetime

ds_gb_state.index.set_levels(pd.to_datetime(ds_gb_state.index.levels[1]), 1, True)

我们可以做同样的技巧来获得最小值。

ds_gb_state.index.levels[1].min()

Timestamp('2013-12-01 00:00:00')

尽管我相信@yatu的答案是完全值得的。它值得比较

该方法get_level_values利用levelslabels属性,并且等效于此

ds_gb_state.index.get_level_values(0)

Index(['Alabama', 'Alabama', 'Alabama', 'Alabama', 'Alabama', 'Alaska',
       'Alaska', 'Alaska'],
      dtype='object', name='State')

ds_gb_state.index.levels[0][ds_gb_state.index.labels[0]]

Index(['Alabama', 'Alabama', 'Alabama', 'Alabama', 'Alabama', 'Alaska',
       'Alaska', 'Alaska'],
      dtype='object', name='State')

因此,要获得唯一值,熊猫必须获取已经唯一的值切片,以便产生可能的非唯一值,而又要经历使其再次变得唯一的麻烦。我建议跳过不必要的步骤。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章