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

标签 python pandas

我有一个如下所示的多索引数据框:

                    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

关于python - 未使用 .xs() 和 .get_level_values() 在切片上设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51541697/

相关文章:

python - 使用 celery 从另一个周期性任务运行任务

python - 优化速度条件

performance - Pandas 系列与单个向量的相关性

python - 如何使用 Pandas 中另一列的 unicode 文本创建新列?

python - 如何在python中添加列表元素

python - 在云函数中获取环境变量

python - Pandas - 每组内匹配的平均值减去不匹配的平均值

python - 从 pandas DataFrame 中的多个字符串列中删除子字符串

python - 如何在 Django 中使用 {% url %} 语句调用 "wizard view"?

python - 如何插入统计注释(星号或 p 值)