根据唯一行名计算数据框子集的均值

时间:2016-08-31 16:00:30

标签: python pandas numpy

我有一个如下所示的数据框,

 df.head()

Sym P1  P2  P3  P4  P5  B1  B2  B3  B4  B5
AA  7.86    8.86    9.86    10.86   11.86   0.7768  1.7768  2.7768  3.7768  4.7768
AA  7.86    8.86    9.86    10.86   11.86   0.8664  1.8664  2.8664  3.8664  4.8664
AA  7.86    8.86    9.86    10.86   11.86   0.874534    1.874534    2.874534    3.874534    4.874534
BB  5.8 6.8 7.8 8.8 9.8 7.42    8.42    9.42    10.42   11.42
BB  5.8 6.8 7.8 8.8 9.8 0.1434  1.1434  2.1434  3.1434  4.1434
CC  0.421   1.421   2.421   3.421   4.421   6.78    7.78    8.78    9.78    10.78
CC  0.421   1.421   2.421   3.421   4.421   8.43    9.43    10.43   11.43   12.43
VV  3.25    4.25    5.25    6.25    7.25    0.97    1.97    2.97    3.97    4.97
VV  3.25    4.25    5.25    6.25    7.25    0.2 1.2 2.2 3.2 4.2
VV  3.25    4.25    5.25    6.25    7.25    0.45    1.45    2.45    3.45    4.45
VV  3.25    4.25    5.25    6.25    7.25    0.78    1.78    2.78    3.78    4.78

我的目标是根据列' sym'中的唯一值得到数据框的后半部分(名称以B1..B5开头的列)的平均值。并创建一个新的数据框,如下所示。

Sym P1  P2  P3  P4  P5  B1  B2  B3  B4  B5
AA  7.86    8.86    9.86    10.86   11.86   0.8664  1.8664  2.8664  3.8664  4.8664
BB  5.8 6.8 7.8 8.8 9.8 3.7817  4.7817  5.7817  6.7817  7.7817
CC  0.421   1.421   2.421   3.421   4.421   7.605   8.605   9.605   10.605  11.605
VV  3.25    4.25    5.25    6.25    7.25    0.615   1.615   2.615   3.615   4.615

我尝试使用groupby来获得独特的sym。如果有人可以建议一个简单的方法来继续 谢谢

1 个答案:

答案 0 :(得分:1)

使用filtergroupby

transformed = df.filter(like='B').groupby(df.Sym).transform(np.mean)
df.loc[:, df.columns.str.contains('B')] = transformed
df

enter image description here