ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-11 06:05:24  阅读:285  来源: 互联网

标签:pandas slice python


使用它是因为它很方便.

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 .

标签:pandas,slice,python
来源: https://codeday.me/bug/20191111/2018090.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有