Pandas DataFrame适用

Fre*_*den 7 python pandas

我有一个DataFrame有四列的熊猫A, B, C, D.事实证明,有时,价值BC可能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])
Run Code Online (Sandbox Code Playgroud)

我用来i表示在框架的所有行上运行的地方.使用Pandas,很容易找到包含零列的行:

df[df.B == 0] and df[df.C == 0]
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何轻松地执行上述转换.我可以想到各种效率低下且不优雅的方法(for整个框架上的循环),但并不简单.

Wou*_*ire 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
Run Code Online (Sandbox Code Playgroud)