添加手段到pandas数据帧

时间:2015-04-08 06:53:26

标签: python python-2.7 pandas

我想在pandas数据框中将值的方法添加到数据框中,这样我就可以将它们写入单个excel文件中。

我有以下数据框:

df = pd.DataFrame({'a': {('0hr', '0.01um', 0): 12,
        ('0hr', '0.01um', 1): 10,
        ('0hr', '0.1um', 0): 8,
        ('0hr', '0.1um', 1): 6,
        ('0hr', 'Control', 0): 4,
        ('0hr', 'Control', 1): 2,
        ('24hr', '0.01um', 0): 18,
        ('24hr', '0.01um', 1): 15,
        ('24hr', '0.1um', 0): 12,
        ('24hr', '0.1um', 1): 9,
        ('24hr', 'Control', 0): 6,
        ('24hr', 'Control', 1): 3},
       'b': {('0hr', '0.01um', 0): 42,
        ('0hr', '0.01um', 1): 35,
        ('0hr', '0.1um', 0): 28,
        ('0hr', '0.1um', 1): 21,
        ('0hr', 'Control', 0): 14,
        ('0hr', 'Control', 1): 7,
        ('24hr', '0.01um', 0): 30,
        ('24hr', '0.01um', 1): 25,
        ('24hr', '0.1um', 0): 20,
        ('24hr', '0.1um', 1): 15,
        ('24hr', 'Control', 0): 10,
        ('24hr', 'Control', 1): 5}})

通过执行以下操作,我可以为每个更高级别的索引计算0和1的均值:

df = df.reorder_levels([2,1,0]).unstack().unstack()
dfMean = df.mean()

print(df)

           a                                         b                             
     0hr                 24hr                  0hr                 24hr         
  0.01um 0.1um Control 0.01um 0.1um Control 0.01um 0.1um Control 0.01um 0.1um Control
0     12     8       4     18    12       6     42    28      14     30    20      10 
1     10     6       2     15     9       3     35    21       7     25    15       5  

print(dfMean)

a  0hr   0.01um     11.0
         0.1um       7.0
         Control     3.0
   24hr  0.01um     16.5
         0.1um      10.5
         Control     4.5
b  0hr   0.01um     38.5
         0.1um      24.5
         Control    10.5
  24hr   0.01um     27.5
         0.1um      17.5
         Control     7.5

我想将dfMean放在df DataFrame中,这样我就可以将所有日期写入单个excel表格......实现这一目标的最佳方法是什么?也许是一个看起来像这样的DataFrame?

       a                                         b                             
     0hr                 24hr                  0hr                 24hr         
  0.01um 0.1um Control 0.01um 0.1um Control 0.01um 0.1um Control 0.01um 0.1um Control
0     12     8       4     18    12       6     42    28      14     30    20      10 
1     10     6       2     15     9       3     35    21       7     25    15       5  
mean  11.0   7.0     3.0   16.5   10.5    4.5   38.5  24.5    10.5   27.5  17.5     7.5

这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

只需将平均值添加为列:

df2 = df.stack().unstack(-2)
df2["mean"] = df2.mean(axis=1)

然后您可以重新排序级别并转置数据框。