【发布时间】:2018-01-24 19:53:32
【问题描述】:
鉴于我的数据框(如下),我可以单独创建新的 MultiIndex 行,这些行不存在
data.loc[('A', 6, 'test'), 'Data'] = 'a_value'
同样,我可以修改MultiIndex中已经存在的slices
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切片的情况不同。
【问题讨论】:
-
嗯。这称为“放大设置”,但我不确定它是否适用于一般切片,即使没有多索引。该文档仅声明它适用于单个键。
-
欢迎任何好的解决方法作为答案!
-
好吧,我只是戳这里……我不太了解它是否可以说这是一个错误,我只知道它叫什么,呵呵。跨度>
-
@JohnE 我在英国所以我睡着了!您的答案是目前最好的解决方案-您应该离开它。我真的很喜欢将
data.index.levels与MultiIndex.from_product一起使用 -
抱歉,我取消了删除
标签: python pandas indexing multi-index