遍历大熊猫的groupby字段

时间:2019-05-08 19:19:59

标签: python pandas

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

我将其数据集加载到熊猫数据框中,并使用groupbystate对事物进行分组。像这样:

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,可以很好地访问它们,但是是否可以枚举所有状态或从该对象中找到最小和最大日期?

2 个答案:

答案 0 :(得分:2)

  

如何找到所有州的名称?

您可以使用MultiIndex.get_level_values

df.index.get_level_values(0).unique()
# Index(['Alabama', 'Alaska'], dtype='object')
  

是否可以从该对象中找到最小和最大日期?

类似地输入日期:

df.index.get_level_values(1).map(pd.to_datetime).min()
# Timestamp('2013-12-01 00:00:00')

答案 1 :(得分:1)

pandas.MultiIndex的主要组成部分是levelslabels属性。构造一个对象时,levels应该是FrozenList个对象中的pandas.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's answer是完全应得的。它值得比较

方法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')

因此,要获取唯一值,熊猫必须获取已经具有唯一值的slice才能产生潜在的非唯一值,而又要经历使其再次变得唯一的麻烦。我建议跳过不必要的步骤。