微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:Pandas使用切片的.describe()版本大于0.20

使用它是因为它很方便.

http://nbviewer.jupyter.org/gist/aflaxman/436cde71f85b93638959

df = pd.DataFrame({'A': [0,0,0,0,1,1],
                   'B': [1,2,3,4,5,6],
                   'C': [8,9,10,11,12,13]})

This use to work!

这用工作!

现在:

>>> pandas.__version__
u'0.20.3'

df.groupby('A').describe().unstack()\
    .loc[:,(slice(None),['count','mean']),]

给出:

TypeError: '['count', 'mean']' is an invalid key

解决方法:

对于列,请删除unstack,因为在0.20.0版本中已将groupby describe formatting更改为:

df = df.groupby('A').describe().loc[:,(slice(None),['count','mean'])]
print (df)

      B          C      
  count mean count  mean
A                       
0   4.0  2.5   4.0   9.5
1   2.0  5.5   2.0  12.5

MultiIndex在索引中,因此首先:被删除,因为选择了所有索引值.

添加了slice(None),因为MultiIndex具有3个级别:

df = df.groupby('A').describe().unstack()\
    .loc[(slice(None),['count','mean'],slice(None))]

print (df)

          A
B  count  0     4.0
          1     2.0
   mean   0     2.5
          1     5.5
C  count  0     4.0
          1     2.0
   mean   0     9.5
          1    12.5
dtype: float64

替代解决方案:

idx = pd.IndexSlice
df = df.groupby('A').describe().unstack()\
    .loc[idx[:,['count','mean'],:]]

print (df)
          A
B  count  0     4.0
          1     2.0
   mean   0     2.5
          1     5.5
C  count  0     4.0
          1     2.0
   mean   0     9.5
          1    12.5
dtype: float64
df = df.groupby('A').describe().unstack()\
    .loc(axis=0)[:,['count','mean'],:]

print (df)
          A
B  count  0     4.0
          1     2.0
   mean   0     2.5
          1     5.5
C  count  0     4.0
          1     2.0
   mean   0     9.5
          1    12.5
dtype: float64

有关更多信息,请参见pandas documentation – using slicers .

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐