RukTech的答案,df.set_value('C', 'x', 10)
远比我在下面建议的选项要快得多。但是,已将其淘汰。
展望未来,推荐的方法是.iat/.at
。
为什么df.xs('C')['x']=10
不起作用:
df.xs('C')
默认情况下,返回带有数据副本的新数据框,因此
df.xs('C')['x']=10
仅修改此新数据框。
df['x']
返回df
数据框的视图,因此
df['x']['C'] = 10
修改df自己。
警告:有时很难预测操作是否返回副本或视图。因此,文档建议避免使用“链接索引”进行赋值。
所以推荐的替代方法是
df.at['C', 'x'] = 10
这不修改df
。
In [18]: %timeit df.set_value('C', 'x', 10)
100000 loops, best of 3: 2.9 µs per loop
In [20]: %timeit df['x']['C'] = 10
100000 loops, best of 3: 6.31 µs per loop
In [81]: %timeit df.at['C', 'x'] = 10
100000 loops, best of 3: 9.2 µs per loop