[英]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.