访问熊猫数据框中内部多索引级别的最后一个元素

Posted

技术标签:

【中文标题】访问熊猫数据框中内部多索引级别的最后一个元素【英文标题】:Access last elements of inner multiindex level in pandas dataframe 【发布时间】:2016-10-29 10:50:12 【问题描述】:

multi index pandas 数据框中,我想访问第二个索引的 last 元素以获取第一个索引的所有值。第二个索引中的级别数取决于第一个索引的值。我浏览了pandas multi index documentation,但找不到任何可以做到这一点的东西。

例如,对于下面的数据框:

arrays = [ ['bar', 'bar', 'baz', 'foo', 'foo', 'foo',   'qux'],
           ['one', 'two', 'one', 'one', 'two', 'three', 'one']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(7, 3), index=index, columns=['A', 'B', 'C'])
df
                 A         B         C
first second
bar   one     0.289163 -0.464633 -0.060487
      two     0.224442  0.177609  2.156436
baz   one    -0.262329 -0.248384  0.925580
foo   one     0.051350  0.452014  0.206809
      two     2.757255 -0.739196  0.183735
      three  -0.064909 -0.963130  1.364771
qux   one    -1.330857  1.881588 -0.262170

我想得到:

                 A         B         C
first second
bar   two     0.224442  0.177609  2.156436
baz   one    -0.262329 -0.248384  0.925580
foo   three  -0.064909 -0.963130  1.364771
qux   one    -1.330857  1.881588 -0.262170

我正在使用的dataframes 有超过10M 行,所以我想避免显式循环。

【问题讨论】:

你可以做df.groupby(level='first').last() 【参考方案1】:

groupbytail 一起使用:

print (df.groupby(level='first').tail(1))
                     A         B         C
first second                              
bar   two     0.053054 -0.555819  0.589998
baz   one    -0.868676  1.293633  1.339474
foo   three   0.407454  0.738872  1.811894
qux   one    -0.346014 -1.491270  0.446772

因为last丢了level second

print (df.groupby(level='first').last())         
              A         B         C
first                              
bar    0.053054 -0.555819  0.589998
baz   -0.868676  1.293633  1.339474
foo    0.407454  0.738872  1.811894
qux   -0.346014 -1.491270  0.446772

【讨论】:

以上是关于访问熊猫数据框中内部多索引级别的最后一个元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌套字典中按元素访问熊猫多索引?

来自按级别分组的多索引熊猫数据框的子图

如何更改熊猫数据框中多索引的外层索引?

在多索引熊猫数据框中使用 groupby 时计算时间和空间梯度

如何按索引级别和值对分组的多索引熊猫系列进行排序?

将熊猫多索引切片彼此分开