无法为新的MultiIndex切片指定值(使用放大设置)

时间:2017-08-16 15:23:43

标签: python pandas indexing multi-index

根据我的数据框(下面),我可以单独创建

不存在的新MultiIndex
data.loc[('A', 6, 'test'), 'Data'] = 'a_value'

同样,我可以修改MultiIndex

中已存在的切片
 data.loc[pd.IndexSlice['A', 7:8, ('spam', 'eggs')], 'Data'] = 'a_value'

我无法访问以下内容

data.loc[pd.IndexSlice['A', (6, 7), ('eggs', 'spam')], 'Data'] = 'a_value'

因为切片返回的DataFrame为空。除了单独遍历所有不存在的索引之外,还有什么方法可以做到这一点吗?

示例数据

可以通过复制下面的代码生成测试DataFrame

import pandas as pd
import numpy as np
data = pd.DataFrame(np.asarray([np.nan]*2+[np.random.random() for i in range(4)]+[np.nan]*2+[np.random.random(), np.random.random()]),index=pd.MultiIndex(levels=[[u'A', u'B'], [6, 7, 8, 9], [u'eggs', u'spam']], labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 1, 2, 2, 3, 3, 0, 1, 2, 3], [-1, -1, 0, 1, 0, 1, -1, -1, 1, 1]], names=[u'ID', u'ID2', u'ID3']),columns=['Data'])
# end snippet for easy copy/paste to ipython

类似的

Assign new values to slice from MultiIndex DataFrame

  • 请注意,这不是同一个案例,因为这篇文章涵盖了已经 MultiIndex
  • MultiIndex切片的情况

1 个答案:

答案 0 :(得分:1)

我只是填写了NaN,但当然如果你愿意,可以使用SELECT COUNT(*) FROM Users u LEFT JOIN User_Applications s on u.user_id = s.user_id WHERE (s.app_id = 'A' OR s.app_id = 'B' OR s.app_id IS NULL) AND (s.active = false OR s.active IS NULL); 。现有的数据帧已经有一些缺失的值,因此仅使用fillna为新行提供非NaN值会更难,但我不能100%清楚你到底是什么试图在这里做。

update