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

2024-09-28 21:15:59 发布

您现在位置:Python中文网/ 问答频道 /正文

这是起始数据表:

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

有没有关于我如何删除包含“Organe”文本的行的建议(删除该行后,将所有内容向上移动,这样就不会出现空白行)

我还想“分解”第一行,使其看起来像: enter image description here

当然,如果不需要反汇编第一行来计算p值,则不需要反汇编第一行。我的最终目标是为每一列计算每一行的所有可能组合(如a对b、a对c、a对d、a对e、…、b对c、b对d等)之间的p值,我有一种感觉,如果我再次陷入困境,这将在将来创建另一个帖子


Tags: readdata格式数字excelstatfile数据表
1条回答
网友
1楼 · 发布于 2024-09-28 21:15:59

您可以在列中获得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  

最简单的方法是通过展平来避免MulitIndex

df = data.groupby(data.columns[0]).aggregate(['count','mean','std'])
df.columns = df.columns.map('{0[0]}_{0[1]}'.format)
df = df.reset_index()
print (df)
  Organ  1000.1_count   1000.1_mean    1000.1_std  2000.1_count  2000.1_mean  \
0     a             3    233.333333    173.494476             3      53330.0   
1     b             2  18333.000000  21213.203436             2       3888.5   

     2000.1_std  3000.1_count  3000.1_mean   3000.1_std  4000.1_count  \
0  62695.216141             3         1633  1638.047924             3   
1    785.595634             2          333     0.000000             2   

   4000.1_mean    4000.1_std  
0      49560.0  64560.464659  
1      33888.5    785.595634  

相关问题 更多 >