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