python - 在不先调用 groupby 的情况下调用 agg

标签 python pandas

有没有类似agg的函数,不需要先调用groupby

例如,我经常已经写了一个 agg map,并且想评估整个表的 map。

所以我想改变

data = data.groupby("key").agg({"foo1":"sum", "foo2":"mean"})

data = data.agg({"foo1":"sum", "foo2":"mean"})

我目前通过插入一个假 key ,然后聚合它来做到这一点。但这是一个黑客。有没有更好的办法?

最佳答案

更新:正如@root 在评论中提出的那样,按np.repeat(0, len(df)) 分组会更容易、更优雅:

In [5]: df.groupby(np.repeat(0, len(df))).agg({'A':'sum', 'B':'mean', 'C':'min'})
Out[5]:
      B    A   C
0  42.9  484  21

旧答案:

假设您有一个始终为 >= 0 的数字索引:

In [139]: df.groupby(df.index >= 0, as_index=False).agg({'A':'sum', 'B':'mean', 'C':'min'})
Out[139]:
     A     B   C
0  484  42.9  21

或者假设您的索引没有任何 NaN

In [140]: df.groupby(df.index==df.index, as_index=False).agg({'A':'sum', 'B':'mean', 'C':'min'})
Out[140]:
     A     B   C
0  484  42.9  21

如果您的索引可以有 NaN,请使用以下技巧:

In [160]: df.groupby(pd.notnull(df.index) | pd.isnull(df.index), as_index=False).agg({'A':'sum', 'B':'mean', 'C':'min'})
Out[160]:
     A     B   C
0  484  42.9  21

数据:

In [138]: df
Out[138]:
    A   B   C
0  34  45  68
1  71  62  61
2  39  51  33
3  38  62  27
4  16  39  21
5  94  41  41
6  14  11  41
7  76  40  29
8  44  34  70
9  58  44  68

关于python - 在不先调用 groupby 的情况下调用 agg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949434/

相关文章:

python - Flask:无法让gunicorn 将所有内容记录到文件中

python - Pandas 中 dataframe.loc() 的 Numpy 等价性是什么

python - 如何在 Python Pandas 中设置 Dataframe 图的标记样式?

python - 将 Pandas 数据框汇总为半小时一次

Python 和 Pandas : How to return a copy of a dataframe?

python - 在 Python 中使用调试器捕获段错误

python - 由空集组成的集合

python - 如何从 Linux 上的 python 控制 labview 中的实验?

python - 如何在 Windows 10 上将 ipynb 文件与 Jupyter Lab(来自 Anaconda)相关联

python - 保留 NaN 值并丢弃非缺失值