gpt4 book ai didi

python - Pandas Dataframe groupby : double groupby & apply function

转载 作者:太空宇宙 更新时间:2023-11-04 08:44:02 24 4
gpt4 key购买 nike

我有一个关于 pandas 数据框的问题:

我有一个像下面这样的数据框,

df = pd.DataFrame([[1,1,10],[1,1,30],[1,2,40],[2,3,50],[2,3,150],[2,4,100]],columns=["a","b","c"])   

a b c
0 1 1 10
1 1 1 30
2 1 2 40
3 2 3 50
4 2 3 150
5 2 4 100

我想产生以下输出,

  a "new col"
0 1 30
1 2 100

第一行计算如下:

  1. 按第一列“a”对 df 进行分组,
  2. 然后将每个分组对象分组为“b”
  3. 计算这个 b 组的“c”的平均值
  4. 计算一个“a”的所有b-groupbs的均值
  5. 这是存储在“new col”中的一个“a”的最终值

我可以想象这在某种程度上令人困惑,但我希望这是可以理解的。

我达到了预期的结果,但由于我需要它来处理一个巨大的数据框,我的解决方案可能会慢很多,

pd.DataFrame([ [a, adata.groupby("b").agg({"c": lambda x:x.mean()}).mean()[0]] for a,adata in df.groupby("a") ],columns=["a","new col"])
a new col
0 1 30.0
1 2 100.0

因此,我需要的是(?) df.groupby("a").groupby("b")["c"].mean()

非常感谢您!

最佳答案

这是一种方式

In [101]: (df.groupby(['a', 'b'], as_index=False)['c'].mean()
.groupby('a', as_index=False)['c'].mean()
.rename(columns={'c': 'new col'}))
Out[101]:
a new col
0 1 30
1 2 100

关于python - Pandas Dataframe groupby : double groupby & apply function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42351807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com