4

おそらく些細な問題ですが、ここで何が起こっているのか (およびそれを修正する方法) を理解する必要があります。

次のように、列「a」と「b」を持つデータフレームがあるとします。

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

3以下の「a」のすべての要素について、対応する「b」の要素を10で割ります。

f[f['a']<=3]['b'] = (f[f['a']<=3]['b'])/10

そのため、列 'b' の値は [1,2,3,40,50] になります。

しかし、列「b」は変更されていないことがわかりました! 何を与える?

4

2 に答える 2

7

ビューではなくコピーに値を割り当てようとしていると思います(コピーです)。 Returning a view vs a copyf[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
于 2013-05-14T21:47:19.680 に答える
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
于 2015-06-15T00:27:40.237 に答える