未使用.xs()和.get_level_Values()在切片上设置值



我有一个MultiIndex数据帧,看起来像这样:

count
year   item
1922   foo       0
bar       0
1923   foo       0
bar       0
1924   foo       0
bar       0

我试图通过用.get_level_values().xs()对数据帧进行切片来设置多年和某些项目的值。例如:

lst = [1923, 1924]
df[df.index.get_level_values('year').isin(lst)].xs('foo', level=1).loc[:, 'count'] = 3

这不会抛出任何错误,但值仍然为0:

In: df[df.index.get_level_values('year').isin(lst)].xs('foo', level=1)
Out: 
count
year
1923   0
1924   0

如何更改数据帧的这些切片中的值?

我认为只需要过滤:

lst = [1923, 1924]
m1 = df.index.get_level_values('year').isin(lst)
m2 = df.index.get_level_values('item') == 'foo'
df.loc[m1 & m2, 'count'] = 3
print (df)
count
year item       
1922 foo       0
bar       0
1923 foo       3
bar       0
1924 foo       3
bar       0

我相信你可以做到:

df.loc[(1923, 'foo'), 'count'] = 3

最新更新