我有一个2级索引的数据框,我想只留下2个第二级的顶部行,并添加一行“其他”为其余行。这是我的数据框:
import pandas as pd
df = pd.DataFrame()
df["Idx1"] = ["A", "A", "A", "A", "B", "B", "B", "B"]
df["Idx2"] = ["X", "Y", "Z", "Q", "X", "Y", "Z", "Q"]
df["Values"] = [1,2,3,4, 1,2,3,4]
df = df.set_index(["Idx1", "Idx2"])
df
这就是我如何提取第一级的顶部2
行:
res = df.groupby(level = 0).head(2)
res
但是,我在添加“其他”列时遇到问题。我希望的输出是:
enter image description here
如何用最优雅的方式来做呢?
2条答案
按热度按时间b1payxdu1#
我认为您可以通过计数器
Other
和GroupBy.cumcount
转换MultiIndex的第二级,然后聚合sum
:性能适用于10k行数据中的1k行:
mozway
的另一个解决方案要慢382倍:py49o6xq2#
一个选项是使用
groupby.apply
获取前两个值,concat
为head
,其余值为sum
:输出: