我有一个关于 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
第一行计算如下:
- 按第一列“a”对 df 进行分组,
- 然后将每个分组对象分组为“b”
- 计算这个 b 组的“c”的平均值
- 计算一个“a”的所有b-groupbs的均值
- 这是存储在“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
