有没有类似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/