当使用df.mean()时,我得到一个结果,其中给出每列的平均值。现在让我们说我想要第一列的平均值和第二列的平均值。有没有办法做到这一点?我不想拆卸和重新组装数据框。熊猫:将不同的功能应用于不同的列
我最初的想法是做沿着pandas.groupby.agg的线(),像这样的东西:
df = pd.DataFrame(np.random.random((10,2)), columns=['A','B'])
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
Traceback (most recent call last):
File "<ipython-input-81-265d3e797682>", line 1, in <module>
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3471, in apply
return self._apply_standard(f, axis, reduce=reduce)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3560, in _apply_standard
results[i] = func(v)
TypeError: ("'dict' object is not callable", u'occurred at index A')
但显然这是行不通的。看起来像传递一个字典将是一个直观的方式,但有没有另一种方式(同样没有反汇编和重新组装DataFrame)?
实际上这很不错。我的解决方法是在数据框中插入一列,在该列上执行groupby,然后将字典传递给聚合方法。 – pbreach 2014-10-18 03:37:51
谢谢!我注意到,如果DataFrame中的字段数多于函数字典中的字段,则会失败。 @ bill-letson你也看过吗? – 2016-10-20 12:36:19
完整的实现应该包含一个返回标识函数的尝试KeyError子句:lambda x:x – 2017-01-03 16:47:01