gpt4 book ai didi

python - 如何将 agg 应用于具有根据级别不同功能的多索引的数据框?

转载 作者:行者123 更新时间:2023-12-01 07:22:39 28 4
gpt4 key购买 nike

我想根据索引的第二级对具有多重索引的数据帧应用不同的函数。

例如,对于数据框:

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)时获得该行的最小值,例如:

        value
x tmax 7
tmin 1
y tmax 6
tmin 5

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

df.agg({'tmax': np.max, 'tmin': np.min}, axis = 1)

最佳答案

使用concatDataFrame.xs和聚合函数:

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,则按第二级过滤:

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

关于python - 如何将 agg 应用于具有根据级别不同功能的多索引的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624878/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com