我想根据索引的第二级对具有multiindex的数据框应用不同的功能。
例如,对于数据框:
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,但是我不知道如何根据multiindex的值来应用max和min函数:
df.agg({'tmax': np.max, 'tmin': np.min}, axis = 1)
答案 0 :(得分:1)
将concat
与DataFrame.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
如果仅值tmax
和tmin
使用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