我想根据布尔条件更改分类列的值。
我很确定使用.loc提供的高级索引应该可以实现,如下所示,但是虽然这适用于索引较小的行,但是对于大型索引它会无声地失败,因为您可以通过下面的示例尝试自己。我做错了什么?
import pandas as pd
df = pd.DataFrame(dict(A=np.array(range(0, 200)), B=pd.Categorical(['a']*200, categories=['a', 'b'])))
# Setting a categorical with boolean indexing works fine for small indices
print df.loc[df.A == 5]
df.loc[df.A == 5, 'B'] = 'b'
print df.loc[df.A == 5]
print ""
# ... but fails for large indices
print df.loc[df.A == 150]
df.loc[df.A == 150, 'B'] = 'b'
print df.loc[df.A == 150]
在我的pandas 0.15.1.dev安装时输出(请注意,A == 5正确更新了值,但A == 150则未正确更新):
A B
5 5 a
A B
5 5 b
A B
150 150 a
A B
150 150 a
感谢任何关于出错的提示。对我来说这看起来像个错误,但我刚刚开始使用大熊猫,可能会弄错。