下面有一个示例多索引数据(实际要大得多)。我希望将'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的最后一行,而不是索引级别。
发布于 2020-09-13 19:58:17
您已经接近了,将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这是您的群组结果:
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)。
https://stackoverflow.com/questions/63874991
复制相似问题