根据我的数据框(下面),我可以单独创建
不存在的新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
切片的情况
答案 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