在Pandas MultiIndex数据框中设置值 - 查看与复制

时间:2015-06-26 17:28:09

标签: python pandas

我还有另一个问题与Pands是创建视图还是数据框副本有关。我在下面有一个非常简单的例子。有人可以向我解释如何更改Pandas MultiIndex数据框中某些值的子集吗?

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)
new = [0,2] # want to slice 1st and 3rd rows
df.ix[new]['qux']['two'] = 2 #Doesn't actually set the value to 2
df.iloc[new]['qux']['two'] = 2 #This doesn't work either
df # returns original data frame

1 个答案:

答案 0 :(得分:1)

Here是有关使用MultiIndex进行索引的文档。选择有很多可能性,但它实际上并没有显示如何设置单个元素(而是更多地关注通过切片器设置以设置多个元素)。所以如果你想做一个doc pull-request来更新会很棒。

您正在使用标签和切片进行索引,因此您可以执行此操作

我们需要使用.ix因为我们希望0和2引用位置而不是标签。第一个术语[0,2]对行进行切片,第二个('qux','two')切片列。元组语法允许多级规范。

df.ix[[0,2],('qux','two')] = 2

In [14]: df
Out[14]: 
first        bar                 baz                 foo                 qux         
second       one       two       one       two       one       two       one      two
A       1.018305 -1.435930 -1.200186  0.945463 -0.811409 -0.518572  0.083204  2.00000
B       0.699306  1.318884 -2.035644  0.069020  0.822584  1.085361 -0.615533 -0.37569
C       0.723708  2.008935 -0.014955  1.463080 -0.219143 -0.958606 -0.079401  2.00000