How to prevent groupby from surclassing index?(如何防止Groupby超越指数?)
本文介绍了如何防止Groupby超越指数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设您有以下半MultiIndex object
import pandas as pd
df = pd.DataFrame({
'c': {
('r', 'r1'): 1.,
('r', 'r2'): 2.,
},
})
print(df)
# c
# r r1 1
# r2 2
让我们重点关注分层索引,即垂直索引。首先,请注意,正如预期的那样,我们拥有
>>> df.index.__class__.__name__
'MultiIndex'
重点是pandas.DataFrame.groupby
可能-classdf.index
取决于最终的级数是否为1。
>>> dfg = df.groupby(axis=0, level=0).sum()
>>> dfg.index.__class__.__name__
'Index'
防止/纠正此类行为的最干净方法是什么?目前,我同意
>>> dfg.index = pd.Index((c,) for c in dfg.index) # Doing so is equivalent to using `pd.MultiIndex.from_tuples`
>>> dfg.index.__class__.__name__
'MultiIndex'
为什么?查看评论:没有XY问题...
假设您要将求和的值传播到更低的级别。SO上提出的解决方案都不适合我。可读性不足和/或隐藏了有趣的临时计算。原来,在源和处理MultiIndex实例时,执行此类传播变得相当容易。>>> df_ = df.copy() # copy for the sake of illustration
>>> df_.iloc[:, :] = dfg # Actually equivalent to `df_.update(dfg)`
>>> df_
c
r r1 3
r2 3
# whereas without correction:
# c
# r r1 nan
# r2 nan
NB:此方法适用于所有dfg.index.nlevels
。
推荐答案
尝试使用pd.DataFrame.align
:
df.align(dfg, level=0)
输出:
( c
r r1 1.0
r2 2.0,
c
r r1 3.0
r2 3.0)
注意:每个数据帧具有相同索引的元组。
然后,
pd.concat(list(df.align(dfg, level=0)), axis=1)
然后您可以获得连接的数据帧,如下所示:
c c
r r1 1.0 3.0
r2 2.0 3.0
这篇关于如何防止Groupby超越指数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何防止Groupby超越指数?
基础教程推荐
猜你喜欢
- 获取多索引中某个级别的最后一个元素 2022-09-22
- 在OpenCV中放大后,Python会捕捉图像的特定部分 2022-09-22
- 使用工作区API导入方法导入数据库笔记本(动态内 2022-09-21
- 如何在hdf5文件的多个组之间拆分数据? 2022-09-21
- 如何将RPC与Volttron配合使用 2022-09-21
- 如何防止Groupby超越指数? 2022-09-22
- 在 pandas 中使用带有多重索引的.loc 2022-09-22
- 跟在带量词的前瞻后面有什么作用? 2022-09-22
- Python h5py-为什么我收到广播错误? 2022-09-21
- 从顶点坐标创建三角网格 2022-09-21