7

DataFrame私は4列のパンダを持っていますA, B, C, D. 場合によっては、 と の値がになることがBありCます0。したがって、私は以下を取得したいと考えています。

B[i] = B[i] if B[i] else min(A[i], D[i])
C[i] = C[i] if C[i] else max(A[i], D[i])

ここiで、フレームのすべての行にわたる実行を示すために使用しました。Pandas を使用すると、ゼロ列を含む行を簡単に見つけることができます。

df[df.B == 0] and df[df.C == 0]

ただし、上記の変換を簡単に実行する方法がわかりません。forさまざまな非効率的で洗練されていない方法 (フレーム全体のループ)を考えることができますが、単純なものはありません。

4

2 に答える 2

8

ブール値のインデックス作成と適用を組み合わせることで、このトリックを実行できます。列 C のゼロ要素を置き換える例を以下に示します。

In [22]: df
Out[22]:
   A  B  C  D
0  8  3  5  8
1  9  4  0  4
2  5  4  3  8
3  4  8  5  1

In [23]: bi = df.C==0

In [24]: df.ix[bi, 'C'] = df[bi][['A', 'D']].apply(max, axis=1)

In [25]: df
Out[25]:
   A  B  C  D
0  8  3  5  8
1  9  4  9  4
2  5  4  3  8
3  4  8  5  1
于 2012-08-05T20:07:32.360 に答える
2

pandas 0.8.1 ガイドの 6.7.2 章を参照してください。

from pandas import *
import numpy as np

df = DataFrame({'A' : [5,6,3], 'B' : [0,0,0], 'C':[0,0,0], 'D' : [3,4,5]})

for idx, row in df.iterrows():
    if row['B'] == 0:
        row['B'] = min(row['A'], row['D'])
    if row['C'] == 0:
        row['C'] = min(row['A'], row['D'])
于 2012-08-03T19:05:11.010 に答える