我一直在研究熊猫的公开数据集,其中包含美国各州的一些空气质量统计数据。
我将其数据集加载到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.MultiIndex
是levels
和labels
属性。构造一个时,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的答案是完全值得的。它值得比较
该方法get_level_values
利用levels
和labels
属性,并且等效于此
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] 删除。
我来说两句