簡體   English   中英

修改pandas MultiIndex DataFrame中每組最后一行

[英]Modify the last row of each group in 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 wold 都被替換為 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 的最后一行,而不是在索引級別

您很接近,將loc與結果index一起使用並分配:

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

這是您的 groupby 結果:

df.groupby(level=0).tail(1)
 
                 col
level 0 level 1     
a       v          2
b       c          5
c       p          8
d       z         11

使用.index獲取要更改的行的索引:

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

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

您有索引標簽,因此在最后的分配步驟中需要loc (而不是iloc )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM