首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改大熊猫MultiIndex DataFrame中每组的最后一行

修改大熊猫MultiIndex DataFrame中每组的最后一行
EN

Stack Overflow用户
提问于 2020-09-13 19:55:43
回答 1查看 836关注 0票数 1

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

代码语言:javascript
运行
复制
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取代了。我尝试过这些解决方案,但我不知道如何正确地设置值。我可以得到布尔级数和最后一行的数据,但似乎无法知道如何将它们设置为新的值。我在下面尝试过的

代码语言:javascript
运行
复制
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的最后一行,而不是索引级别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-13 19:58:17

您已经接近了,将loc与您的结果的index一起使用并分配:

代码语言:javascript
运行
复制
df.loc[df.groupby(level=0).tail(1).index, 'col'] = 100
df

                 col
level 0 level 1     
a       t          0
        u          1
        v        100
b       w          3
        a          4
        c        100
c       d          6
        j          7
        p        100
d       k          9
        q         10
        z        100

这是您的群组结果:

代码语言:javascript
运行
复制
df.groupby(level=0).tail(1)
 
                 col
level 0 level 1     
a       v          2
b       c          5
c       p          8
d       z         11

获取要用.index更改的行的索引

代码语言:javascript
运行
复制
df.groupby(level=0).tail(1).index

MultiIndex([('a', 'v'),
            ('b', 'c'),
            ('c', 'p'),
            ('d', 'z')],
           names=['level 0', 'level 1'])

您有索引标签,因此在最后的赋值步骤中需要loc (而不是iloc)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63874991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档