Python 2.7 替换多索引数据帧中的列值

Python 2.7 替换多索引数据帧中的列值,python-2.7,pandas,multi-index,Python 2.7,Pandas,Multi Index,我想根据数据帧中的第一个索引值进行条件替换。如果我有一个数据帧,例如: from pandas import * arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] tuples = zip(*arrays) index = MultiIndex.from_tuples(tu

我想根据数据帧中的第一个索引值进行条件替换。如果我有一个数据帧,例如:

from pandas import *
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]

tuples = zip(*arrays)

index = MultiIndex.from_tuples(tuples, names=['first','second'])
data = DataFrame(randn(8,2),index=index,columns=['c1','c2'])
我认为我应该能够通过以下方式替换列中的值:

data.ix['bar']['c1'] = -999
但这将返回原始数据帧,保持不变。有人能解释一下应该怎么做,以及为什么我目前的方法不起作用吗

也许是这样:

data.c1[ 'bar' ] = -999

我猜在这里
data.ix['bar']['c1']
返回的是一个副本,而不是视图。请参见以下内容:

data.c1[ 'bar' ] = -999


我猜在这里
data.ix['bar']['c1']
返回的是一个副本,而不是视图。请参见您可以使用
.loc

>>> data.loc["bar", "c1"]
second
one       0.369406
two       0.691445
Name: c1, dtype: float64
>>> data.loc["bar", "c1"] = -999
>>> data
                      c1        c2
first second                      
bar   one    -999.000000  0.302155
      two    -999.000000 -1.260789
baz   one       0.103455 -0.556967
      two      -1.600112  0.491787
foo   one       0.779901 -0.885565
      two      -1.041722 -0.570302
qux   one      -1.152093 -1.767028
      two      -0.364624 -0.302240

[8 rows x 2 columns]

您可以使用
.loc

>>> data.loc["bar", "c1"]
second
one       0.369406
two       0.691445
Name: c1, dtype: float64
>>> data.loc["bar", "c1"] = -999
>>> data
                      c1        c2
first second                      
bar   one    -999.000000  0.302155
      two    -999.000000 -1.260789
baz   one       0.103455 -0.556967
      two      -1.600112  0.491787
foo   one       0.779901 -0.885565
      two      -1.041722 -0.570302
qux   one      -1.152093 -1.767028
      two      -0.364624 -0.302240

[8 rows x 2 columns]

你用错了符号。试一试

data.ix['bar','c1'] = -999

索引的第一个元素引用行,第二个元素引用列。请参阅。

您使用了错误的符号。试一试

data.ix['bar','c1'] = -999

索引的第一个元素引用行,第二个元素引用列。请参阅。

对于缺少的数据,您可能更喜欢使用NaN。@AndyHayden-这是真的,我可能会使用NaN。我只是在这里选择了-999作为示例。您可能更喜欢使用NaN来表示缺少的数据。@AndyHayden-True,我可能会使用NaN。我只是选择了-999作为例子。很有趣,谢谢你的参考。我从来不知道。很有趣,谢谢你的推荐。我从来不知道,谢谢。我喜欢.ix,因为它比.loc更一般。再次感谢汉克斯。我喜欢.ix,因为它比.loc更一般。再次感谢