Pandas Groupby转换矩阵不会影响Groupby对象

时间:2014-05-01 19:43:46

标签: python pandas

我有以下简单的groupby:

  results_by_lab = results.groupby(lambda x : x.laboratory, 1)
  for k, v in results_by_lab:
    v = v.sum(axis=1)
  for k, v in results_by_lab:
    print k
    print v

总和对groupby对象没有影响。

我通过将数据加载到Python字典中来解决这个问题,但这肯定不是正确的做事方式。

我应该如何保存groupby对象中的转换?

编辑:

为了澄清,我的困难在于,有时我的转换依赖于标题的价值。 上面的代码没有证明这一点,但以下是:

  results_by_lab = results.groupby(lambda x : x.laboratory, 1)
  for k, v in results_by_lab:
    v = v.sum(axis=1)
    v = v.apply(lambda x : adjust_cfm_for_laboratory_parameters(x, k))

这种修改是否可以通过转换完成,其中数据帧(v)的转换依赖于其密钥?

1 个答案:

答案 0 :(得分:0)

总和“无效”,因为v = v.sum(axis=1)实际上并不更新每个组。它重新定义变量v,然后在循环的每次迭代中覆盖它。您的GroupBy对象results_by_lab永远不会更改。

令人高兴的是,大熊猫很容易做你想做的事情。

total_by_lab = results_by_lab.sum()

将给出每组的总和。当然,如果您愿意,可以打印total_by_lab

更一般地说,如果要使用任意函数转换GroupBy对象的组,请使用apply,transform或filter方法。请参阅Jeff上面链接的文档,以了解这三者之间的区别。