pandas:使用groupby和gregation在我似乎无法选择的第一个数据行的顶部创建一个空行

问题描述 投票:0回答:1

这是起始数据表:

Organ     1000.1     2000.1     3000.1     4000.1    ....
a         333        34343      3434       23233
a         334        123324     1233       123124
a         33         2323       232        2323
b         3333        4444      333         34444
b         33333       3333      333        33333
.
.
.

依此类推。这些数字只是随机数,如您所见,“器官”列的值包含一些重复项。

我正在尝试计算计数,均值和标准差,以便可以像这样计算p值:

data = pd.read_excel('file')
data_stat = data.groupby(data.columns[0]).aggregate(['count','mean','std'])

这确实计算了三个参数,但是使用错误的格式:

enter image description here

上面的屏幕截图与示例数据表不匹配,只是想显示结果格式。使用reset_index()尝试过,但是没有用:

enter image description here

关于我如何摆脱带有'Organ'文本的行的任何建议(删除该行后,将所有内容向上移动,以便没有空白行)?

而且我也想'反汇编'第一行,所以它看起来像:enter image description here

当然,如果不需要分解第一行来计算p值,则没有必要。我的最终目标是计算每行所有可能组合之间的p值(例如a vs b,a vs c,a vs d,a vs e,...,b vs c,b vs d等)如果我再次陷入困境,我觉得每列都会在以后创建另一篇文章。

python pandas dataframe
1个回答
0
投票

您在列中获得MultiIndex,并且要更改第一列,请使用:

df = data.groupby(data.columns[0]).aggregate(['count','mean','std']).reset_index()

L = [(a,b) if b!= '' else ('value', a)for a,b in df.columns.tolist()]
print (L)
[('value', 'Organ'), ('1000.1', 'count'), ('1000.1', 'mean'), ('1000.1', 'std'), 
 ('2000.1', 'count'), ('2000.1', 'mean'), ('2000.1', 'std'), ('3000.1', 'count'), 
 ('3000.1', 'mean'), ('3000.1', 'std'), ('4000.1', 'count'), ('4000.1', 'mean'), 
 ('4000.1', 'std')]

df.columns = pd.MultiIndex.from_tuples(L)
print (df)
  value 1000.1                             2000.1                         \
  Organ  count          mean           std  count     mean           std   
0     a      3    233.333333    173.494476      3  53330.0  62695.216141   
1     b      2  18333.000000  21213.203436      2   3888.5    785.595634   

  3000.1                    4000.1                         
   count  mean          std  count     mean           std  
0      3  1633  1638.047924      3  49560.0  64560.464659  
1      2   333     0.000000      2  33888.5    785.595634  

可能使用MultiIndex作为显示值:

#temporaly display MultiIndex
with pd.option_context('display.multi_sparse', False):
    print (df)
      value 1000.1        1000.1        1000.1 2000.1   2000.1        2000.1  \
      Organ  count          mean           std  count     mean           std   
    0     a      3    233.333333    173.494476      3  53330.0  62695.216141   
    1     b      2  18333.000000  21213.203436      2   3888.5    785.595634   

      3000.1 3000.1       3000.1 4000.1   4000.1        4000.1  
       count   mean          std  count     mean           std  
    0      3   1633  1638.047924      3  49560.0  64560.464659  
    1      2    333     0.000000      2  33888.5    785.595634  
© www.soinside.com 2019 - 2024. All rights reserved.