7

それぞれが生物を表す2つの列を持つデータフレームがあります。それらはORG1およびORG2と呼ばれます。ORG2の値を対応するインデックス値のORG1に移動したいと思います。

したがって、ORG1が「A」でORG2が「B」の場合、ORG1にORG2から値「B」を取得させます。

次のように、移動したいORG2生物のインデックスを特定する作業をすでに開始しています。

def move_org2(x):
    org2_matches = Series(x.ORG2.str.count("ESBL"))
    return x.ix[org2_matches == 1]

org2_DF = move_org2(DF)

org2_DF.ORG2.index

これを使用してORG1値を対応するORG2インデックスの値に変更するための最良の方法は何ですか

4

2 に答える 2

17
In [13]: df
Out[13]:
  ORG1  ORG2
0    A  ESBL
1    B     P
2    C     Q
3    D     R
4    E  ESBL

In [14]: cond = df.ORG2 == 'ESBL'

In [15]: df.ORG1[cond] = df.ORG2[cond]

In [16]: df
Out[16]:
   ORG1  ORG2
0  ESBL  ESBL
1     B     P
2     C     Q
3     D     R
4  ESBL  ESBL
于 2012-10-25T05:54:10.133 に答える
3

言い換えれば、.locあなたを使用すると

In [2008]: df
Out[2008]:
  ORG1  ORG2
0    A  ESBL
1    B     P
2    C     Q
3    D     R
4    E  ESBL

In [2009]: df.loc[df['ORG2'] == 'ESBL', 'ORG1'] = df['ORG2']

In [2010]: df
Out[2010]:
   ORG1  ORG2
0  ESBL  ESBL
1     B     P
2     C     Q
3     D     R
4  ESBL  ESBL

または、オリジナルを変更せずにコピーが必要な場合はdf.mask()

In [2016]: df.mask(df['ORG2'] == 'ESBL', df['ORG2'], axis=0)
Out[2016]:
   ORG1  ORG2
0  ESBL  ESBL
1     B     P
2     C     Q
3     D     R
4  ESBL  ESBL
于 2017-09-12T05:33:17.887 に答える