我有一个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