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超越指数?
猜你喜欢
- 如何将属性添加到作为组存储在HDF5文件中的 pa 2022-09-21
- 使用带有CROSS_VAL_SCORE的自定义估计器失败 2022-09-21
- 基于多个一级列的子集多索引DataFrame 2022-09-22
- 获取多索引中某个级别的最后一个元素 2022-09-22
- H5py:如何在HDF5组和数据集上使用key()循环 2022-09-21
- 如何防止Groupby超越指数? 2022-09-22
- 将文件从Azure文件加载到Azure数据库 2022-09-21
- 合并具有多个索引和列值的数据帧 2022-09-22
- 为什么切换屏幕在Kivy中不起作用? 2022-09-21
- 如何命名HDF5数据集中的列? 2022-09-21