我有以下简单的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)的转换依赖于其密钥?
答案 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上面链接的文档,以了解这三者之间的区别。