Pandas:将值重新分配给数据框的"块"

use*_*521 4 dataframe pandas

可能是一个微不足道的问题,但我需要了解这里发生了什么(以及如何解决它).

假设我有一个包含列'a'和'b'的数据框,如下所示:

f = pandas.DataFrame({'a':[1,2,3,4,5], 'b':[10,20,30,40,50]})
Run Code Online (Sandbox Code Playgroud)

现在对于3个或更少的'a'的每个元素,我想将'b'的相应元素除以10.

f[f['a']<=3]['b'] = (f[f['a']<=3]['b'])/10
Run Code Online (Sandbox Code Playgroud)

因此,'b'列中的值现在应为[1,2,3,40,50].

但我发现'b'栏保持不变!是什么赋予了?

And*_*den 6

我认为您正在尝试将值分配给副本而不是视图(f[f['a']<=3]['b']是副本),请参阅返回视图与副本.

但是,您可以对此进行重新排序,它将成为一个视图:

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
Run Code Online (Sandbox Code Playgroud)