我有一个DataFrame有四列的熊猫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])
Run Code Online (Sandbox Code Playgroud)
我用来i表示在框架的所有行上运行的地方.使用Pandas,很容易找到包含零列的行:
df[df.B == 0] and df[df.C == 0]
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何轻松地执行上述转换.我可以想到各种效率低下且不优雅的方法(for整个框架上的循环),但并不简单.
布尔索引和应用的组合可以做到这一点.下面是关于替换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)