首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将agg应用于具有不同功能的多索引的数据仓库中?

如何将agg应用于具有不同功能的多索引的数据仓库中?
EN

Stack Overflow用户
提问于 2019-08-23 10:54:43
回答 1查看 69关注 0票数 1

我想要根据索引的第二级将不同的函数应用到具有多个索引的dataframe中。

例如,对于dataframe:

代码语言:javascript
复制
In [4]: df = pd.DataFrame({'a': [1,2,6,7],'b': [7,1,4,5]}, index = pd.MultiIndex.from_tuples( 
   ...:     [('x','tmax'),('x','tmin'),('y','tmax'), ('y','tmin')]))                                                          

In [5]: df                                                                                                                    
Out[5]: 
        a  b
x tmax  1  7
  tmin  2  1
y tmax  6  4
  tmin  7  5     

例如,我希望在索引为(-,tmax)时拥有行的最大值,当索引为(-,tmin)时,获得最小值:

代码语言:javascript
复制
        value
x tmax      7
  tmin      1
y tmax      6
  tmin      5

我尝试过使用agg,但是我不知道如何根据多索引的值应用max和min函数:

代码语言:javascript
复制
df.agg({'tmax': np.max, 'tmin': np.min}, axis = 1)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-23 10:58:18

concatDataFrame.xs和聚合函数结合使用:

代码语言:javascript
复制
s = pd.concat([df.xs('tmax', level=1, drop_level=False).max(1),
               df.xs('tmin', level=1, drop_level=False).min(1)]).sort_index()
print (s)
x  tmax    7
   tmin    1
y  tmax    6
   tmin    5
dtype: int64

如果只有值tmaxtmin使用numpy.where,则按二级进行筛选。

代码语言:javascript
复制
m = df.index.get_level_values(1) == 'tmax'

s = pd.Series(np.where(m, df.max(1), df.min(1)), index=df.index)
print (s)
x  tmax    7
   tmin    1
y  tmax    6
   tmin    5
dtype: int64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57624878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档