可能是一个微不足道的问题,但我需要了解这里发生了什么(以及如何解决)。
假设我有一个包含'a'和'b'列的数据框,如下所示:
f = pandas.DataFrame({'a':[1,2,3,4,5], 'b':[10,20,30,40,50]})
现在对于'a'的每个元素为3或更少,我想将'b'的相应元素除以10。
f[f['a']<=3]['b'] = (f[f['a']<=3]['b'])/10
因此,'b'列中的值现在应为[1,2,3,40,50]。
但我发现'b'栏保持不变!是什么给了什么?
答案 0 :(得分:6)
我认为您正在尝试为副本而非视图分配值(f[f['a']<=3]['b']
是副本),请参阅 Returning a view versus a copy 。
但是,您可以对此进行重新排序,它将起作用:
In [11]: f['b'][f['a']<=3] = (f[f['a']<=3]['b'])/10
In [12]: f
Out[12]:
a b
0 1 1
1 2 2
2 3 3
3 4 40
4 5 50
答案 1 :(得分:0)
就像刚刚提到的答案一样,它是一个副本和视图的问题。
如果我想这样做,我可以选择:
f['b'] = np.where(f['a'] <= 3, f['b']/10, f['b'])
#f
Out[26]:
a b
0 1 1
1 2 2
2 3 3
3 4 40
4 5 50