目的是对多索引行的第一个级别求平均值。
例如,任务是对行(s1,s2)和(s1,s3)求平均。
给定以下df
a fe gg new_text
(s1, s2) 4 0 3 t
(s1, s3) 3 3 1 t
(s2, s3) 3 2 4 t
(s2, s4) 0 0 4 t
(s3, s1) 2 1 0 t
(s3, s4) 1 1 0 t
预期输出如下所示
a fe gg new_text
s1 7 3 4 t
s2 3 2 8 t
s3 3 3 0 t
我尝试使用以下语法
df.groupby(level=0).agg(['mean'])
产生了不期望的输出
a fe gg
mean mean mean
(s1, s2) 4.0 0.0 3.0
(s1, s3) 3.0 3.0 1.0
(s2, s3) 3.0 2.0 4.0
(s2, s4) 0.0 0.0 4.0
(s3, s1) 2.0 1.0 0.0
(s3, s4) 1.0 1.0 0.0
我想知道如何解决这个问题。
可以使用以下代码重现输出
import pandas as pd
import numpy as np
np.random.seed(0)
arr=np.random.randint(5, size=(6, 3))
df = pd.DataFrame(data=arr, index=[('s1','s2'),('s1','s3'),('s2','s3'),('s2','s4'),('s3','s1'),('s3','s4')],
columns=['a','fe','gg'])
df['new_text']='t'
df2=df.groupby(level=0).agg(['mean'])
4条答案
按热度按时间jucafojl1#
我想你是说
sum
而不是mean
。mec1mxoz2#
我希望这能帮上忙
hs1ihplo3#
您已经使用元组作为DataFrame索引中的项,但尚未使用
MultiIndex
。如果使用MultiIndex,则可以使用
xs()
选择要计算平均值的条目子集:将索引转换为MultiIndex后,DataFrame现在的打印方式如下所示:
现在我们可以挑选出要用于
xs()
计算的行,在本例中是MultiIndex的第0级中包含's1'的所有行:结果:
现在您已经有了一个合适的MultiIndex,您还可以按照预期使用
groupby
:结果:
62lalag44#
生产