我有一个具有重复列名的数据框,该列名说明了重复测量。
df = pd.DataFrame({'A': randn(5), 'B': randn(5)})
df2 = pd.DataFrame({'A': randn(5), 'B': randn(5)})
df3 = pd.concat([df,df2], axis=1)
df3
A B A B
0 -0.875884 -0.298203 0.877414 1.282025
1 1.605602 -0.127038 -0.286237 0.572269
2 1.349540 -0.067487 0.126440 1.063988
3 -0.142809 1.282968 0.941925 -1.593592
4 -0.630353 1.888605 -1.176436 -1.623352
我想采用列A和B的均值,使数据帧缩小到
A B
0 0.000765 0.491911
1 0.659682 0.222616
2 0.737990 0.498251
3 0.399558 -0.155312
4 -0.903395 0.132627
如果我做典型的
df3['A'].mean(axis=1)
我得到一个Series(没有列名),然后应该使用每个col组的平均值构建一个新的数据框。同样,.groupby()方法显然不允许您按列名进行分组,而是给列赋值并对索引进行排序。有什么花哨的方法可以做到这一点吗?
附带问题:为什么
df = pd.DataFrame({'A': randn(5), 'B': randn(5), 'A': randn(5), 'B': randn(5)})
不会生成4列数据帧,但合并同名cols?
您可以使用level
关键字(在这种情况下,仅将列用作索引的第一级(0级)):
In [11]: df3
Out[11]:
A B A B
0 -0.367326 -0.422332 2.379907 1.502237
1 -1.060848 0.083976 0.619213 -0.303383
2 0.805418 -0.109793 0.257343 0.186462
3 2.419282 -0.452402 0.702167 0.216165
4 -0.464248 -0.980507 0.823302 0.900429
In [12]: df3.mean(axis=1, level=0)
Out[12]:
A B
0 1.006291 0.539952
1 -0.220818 -0.109704
2 0.531380 0.038334
3 1.560725 -0.118118
4 0.179527 -0.040039
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句