3

式の結果をデータフレームにブロードキャストしたいのですが、列全体ではなく、フィルター処理されたサブセットだけにブロードキャストしたいと思います。以下の簡略化:

In [6]: df1 = DataFrame({"A":[1, 2, 3, 4], "B":["w", "x", "y", "z"], "C":(numpy.
zeros((4), dtype='S1'))})

In [7]: df1
Out[7]:
   A  B C
0  1  w
1  2  x
2  3  y
3  4  z

したがって、AとBには既存のデータが含まれ、列Cには結果を入力する準備ができています。だから私は以下のようにコラム全体に放送することができます:

In [9]: df1['C'] = 'H'

In [10]: df1
Out[10]:
   A  B  C
0  1  w  H
1  2  x  H
2  3  y  H
3  4  z  H

しかし、フィルタリングされたサブセット(この例では文字「R」)をブロードキャストしようとすると、次のようになります。

In [14]: (df1[df1['A'] > 2])['C']
Out[14]:
2    H
3    H
Name: C

(フィルタリングが機能することを証明するためだけに)

そこで、このサブセットに「R」を割り当ててみます。

In [12]: (df1[df1['A'] > 2])['C'] = "R"

In [13]: df1
Out[13]:
   A  B  C
0  1  w  H
1  2  x  H
2  3  y  H
3  4  z  H

しかし、私の値は変更されていません:((興味深いことに、エラーは発生しません!?)誰かがこれを達成する方法を提案できますか?

どうもありがとう、

4

2 に答える 2

6

最初に列を選択してから、次のようにフィルタリングします。

df1.loc[df1['A'] > 2, 'C'] = "R"

   A  B  C
0  1  w  H
1  2  x  H
2  3  y  R
3  4  z  R
于 2013-03-06T14:19:07.937 に答える
1

備考として、パンダはこの場合に警告を発するようにうまく改善されました:

In [8]: In [12]: (df1[df1['A'] > 2])['C'] = "R"
/Users/tismer/anaconda/bin/ipython:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  #!/bin/bash /Users/tismer/anaconda/bin/python.app

クリックして上からパンダのリンクを読んでください

于 2015-05-07T10:46:01.793 に答える