如何将多索引pandas数据帧的一个条目除以另一个条目

时间:2016-11-18 15:03:00

标签: python pandas multi-index

我有一个多索引的pandas数据框,看起来像这样(片段):

Smad3_pS423/425_customer 0    1        0.664263
                              2        0.209911
                              3        0.099809
                         5    1        0.059652
                              2        0.190174
                              3        0.138850
a-Tubulin                0    1        0.072436
                              2        0.068282
                              3        0.087989
                         5    1        0.083960
                              2        0.076102
                              3        0.068119

df.index的输出为(labels位缩短以供查看):

MultiIndex(levels=[[u'Customer_Col1A2', u'Smad2_pS465/467 customer', u'Smad3_pS423/425_customer', u'Smad4_customer', u'Smad7_customer', u'a-Tubulin'], [u'0', u'10', u'120', u'180', u'20', u'240', u'30', u'300', u'45', u'5', u'60', u'90'], [u'1', u'2', u'3']],
           labels=[[2, 2, 2, 2, 2, 2, 2, ... more_labels...]],
           names=[u'Antibody', u'Time', u'Repeats'])

我的问题是,a-tubulin条目划分Smad3_pS423/425_customer数据条目的最佳方法是什么?

一种繁琐的方法是:

    ab=[]
    for i in self.data.index.get_level_values('Antibody'):
        ab.append(i)
    antibodies= list(set(ab))
    for i in antibodies:
        print self.data.loc[i]/self.HK

但这似乎不是pandas这样做的方式。有人知道更简单的方法吗? (我怀疑pandas可能已经内置了一个内衬来执行此操作)。 感谢

1 个答案:

答案 0 :(得分:1)

如何:

function processData(n, a, b){
  var ans = [0];
  for(var i = 0; i < n; i++){
    var temp = [];
    for(var j = 0; j < ans.length; j++){
      var aa = ans[j] + a;
      if(temp.includes(aa) === false){
       temp.push(aa);
      }
      var bb = ans[j] + b;
      if(temp.includes(bb) === false){
        temp.push(bb);
      }
    }
    ans = temp;
  }
  ans.sort(function(a, b){return a - b});
  return ans;
}

这是我使用的df数据框,您可以使用df.ix['a-Tubulin'] / df.ix['Smad3_pS423/425_customer'] 3 1 2 0 1 0.109047 2 0.325290 3 0.881574 5 1 1.407497 2 0.400170 3 0.490594

加载
df = pd.read_clipboard(sep=',', index_col=[0,1,2])