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

时间:2018-07-26 14:46:08

标签: python pandas

我有一个如下所示的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

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

3 个答案:

答案 0 :(得分:2)

我认为只需要过滤:

@vue/cli-init

答案 1 :(得分:1)

我相信您可以做到:

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

答案 2 :(得分:0)

您也可以使用productloc

a = itertools.product(lst, ['foo'])
df.loc[a, 'count'] = 3

问题

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

是您要更改从df[df.index.get_level_values('year').isin(lst)]返回的副本