python - Pandas :将不同的功能应用于不同的列

标签 python pandas aggregate

当使用 df.mean() 时,我得到一个结果,其中给出了每列的平均值。现在假设我想要第一列的平均值,以及第二列的总和。有没有办法做到这一点?我不想拆卸和重新组装 DataFrame

我最初的想法是按照 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)?

最佳答案

你可以试试闭包:

def multi_func(functions):
    def f(col):
        return functions[col.name](col)
    return f

df = pd.DataFrame(np.random.random((10, 2)), columns=['A', 'B'])
result = df.apply(multi_func({'A': np.mean, 'B': np.sum}))

关于python - Pandas :将不同的功能应用于不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434123/

相关文章:

python - ValueError : 2 columns passed, 传递的数据有 1 列

python - 将带有 Numpy 值的 pandas Dataframe 转换为 pysparkSQL.DataFrame

java - 将多个网页的抓取数据合并到单个页面中

python - 如何在Python中按总和和平均列进行分组?

python - 使用递归分解数量

python - 在树莓派 3 上运行 librosa 和 numba

python - python 获取一个csv字段中2个数字的平均值

r - 在 data.table 中添加行,但在某些列采用相同值时不添加行

python - 在类 "major flaw"中实现装饰器?

Python 保存一个 eval 函数