我有关于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
其中第一行计算如下:
我可以想象这有点令人困惑,但我希望这是可以理解的。
我达到了预期的效果,但是因为我需要一个庞大的数据帧,我的解决方案可能会慢很多,
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("&#34)。GROUPBY(" B")[" C&#34]。意味着()
非常感谢你!
答案 0 :(得分:2)
这是单程
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
答案 1 :(得分:2)
supportedProtocols
答案 2 :(得分:1)
df.groupby(['a','b']).mean().reset_index().groupby('a').mean()
Out[117]:
b c
a
1 1.5 30.0
2 3.5 100.0