Pandas 根据它计算一行的平均值';s标签
根据其标签计算一行中值的平均值:Pandas 根据它计算一行的平均值';s标签,pandas,pandas-groupby,Pandas,Pandas Groupby,根据其标签计算一行中值的平均值: A = [1,2,3,4,5,6,7,8,9,10] B = [0,0,0,0,0,1,1,1,1, 1] Result = pd.DataFrame(data=[A, B]) 我想要的输出是:0->3;1->7.8 pandas有groupby功能,但我不知道如何实现它。谢谢首先,听起来您想为索引添加标签: In [11]: Result = pd.DataFrame(data=[A, B], index=['A', 'B']) In [12]: Res
A = [1,2,3,4,5,6,7,8,9,10]
B = [0,0,0,0,0,1,1,1,1, 1]
Result = pd.DataFrame(data=[A, B])
我想要的输出是:0->3;1->7.8
pandas有groupby功能,但我不知道如何实现它。谢谢首先,听起来您想为索引添加标签:
In [11]: Result = pd.DataFrame(data=[A, B], index=['A', 'B'])
In [12]: Result
Out[12]:
0 1 2 3 4 5 6 7 8 9
A 1 2 3 4 5 6 7 8 9 10
B 0 0 0 0 0 1 1 1 1 1
如果索引是唯一的,则不必进行任何分组,只需取每行的平均值(即轴=1):
但是,如果有多行具有相同的标签,则需要按以下方式分组:
In [21]: Result2 = pd.DataFrame(data=[A, A, B], index=['A', 'A', 'B'])
In [22]: Result2.mean(axis=1)
Out[22]:
A 5.5
A 5.5
B 0.5
dtype: float64
注意:重复的行(恰好与我懒散地使用相同的行内容时具有相同的平均值),通常我们希望取这些平均值的平均值:
In [23]: Result2.mean(axis=1).groupby(level=0).mean()
Out[23]:
A 5.5
B 0.5
dtype: float64
注意:
.groupby(level=0)
将具有相同索引标签的行分组。这是一个简单的groupby
问题
Result=Result.T
Result.groupby(Result[1])[0].mean()
Out[372]:
1
0 3
1 8
Name: 0, dtype: int64
通过构建数据帧,将您想要表示的内容和您想要作为标签的内容作为不同的行,您会给自己带来困难 选项1
groubpy
这将处理数据框
结果中显示的数据
Result.loc[0].groupby(Result.loc[1]).mean()
1
0 3
1 8
Name: 0, dtype: int64
选项2
使用
np.bincount
过度杀戮,因为您的分组值是0
和1
。即使他们没有,我也会有一个解决方案,但这会使问题变得更简单。我想使用原始列表
A
和B
pd.Series(np.bincount(B, A) / np.bincount(B))
0 3.0
1 8.0
dtype: float64
pd.Series(A, B).mean(level=0)
0 3
1 8
dtype: int64
选项3
构造一个系列而不是数据帧。
再次使用原始列表
A
和B
pd.Series(np.bincount(B, A) / np.bincount(B))
0 3.0
1 8.0
dtype: float64
pd.Series(A, B).mean(level=0)
0 3
1 8
dtype: int64