Pandas数据帧应用

2024-05-08 02:33:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一只熊猫,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])

在这里,我使用i来表示对帧的所有行的遍历。使用Pandas很容易找到包含零列的行:

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

但是,我不知道如何轻松地执行上述转换。我可以想到各种低效和不雅的方法(for循环覆盖整个帧),但并不简单。


Tags: and方法信息dataframepandasdfforif
2条回答

布尔索引和apply的结合可以做到这一点。 下面是关于替换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

请尝试“iterrows”DataFrame类方法,以便有效地遍历DataFrame的行。请参阅《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'])

相关问题 更多 >