修改 pandas MultiIndex DataFrame 中每组的最后一行

我下面有一个示例多索引数据框(实际上要大得多)。我想将“col”列中每个级别的最后一行 = 0 索引设置为 100。像这样的数据框


mux = pd.MultiIndex.from_arrays([

list('aaabbbcccddd'),

list('tuvwacdjpkqz')],

names=['level 0', 'level 1'])

df = pd.DataFrame({'col': np.arange(len(mux))}, mux)

df

所以2、5、8和11都将被替换为100。我已经尝试过这些解决方案,但我不知道如何正确设置该值。我可以获得布尔系列和最后一行的数据框,但似乎无法弄清楚如何将它们设置为新值。我在下面尝试过什么


df.groupby(level=0).tail(1).col = 100

df.groupby(level=0).tail(1).col

df.iloc[-1, df.columns.get_loc('col')] = 100

最后一行代码来自上一篇文章,但它只设置 df 的最后一行,而不是在索引级别


动漫人物
浏览 75回答 1
1回答

郎朗坤

你很接近,使用loc你index的结果并分配:df.loc[df.groupby(level=0).tail(1).index, 'col'] = 100df                 collevel 0 level 1     a       t          0        u          1        v        100b       w          3        a          4        c        100c       d          6        j          7        p        100d       k          9        q         10        z        100这是您的分组结果:df.groupby(level=0).tail(1)                  collevel 0 level 1     a       v          2b       c          5c       p          8d       z         11获取要更改的行的索引.index:df.groupby(level=0).tail(1).indexMultiIndex([('a', 'v'),            ('b', 'c'),            ('c', 'p'),            ('d', 'z')],           names=['level 0', 'level 1'])您有索引标签,因此您将需要loc(而不是iloc)来完成最终的分配步骤。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python