根据熊猫中其他列的值检查是否填充了列

时间:2020-02-28 10:17:30

标签: python pandas

我有一个这样的Pandas数据框:

import pandas as pd
df=pd.DataFrame({1: [2, 4, 0, 0, 2], 2: [5, 6, 0, 0, 34], 3:[6,12,0,3,0], 4:[6,7,0,7,0]})

   1   2   3  4
0  2   5   6  6
1  4   6  12  7
2  0   0   0  0
3  0   0   3  7
4  2  34   0  0

我想逐行检查如果第1列或第2列中有任何非零元素,那么第3列或第4列中也至少有一个非零元素;如果第1列或第2列中的元素都为零,那么第3列和第4列也都应为零。

因此,在上面的示例数据帧中,我希望具有以下列表:

[(0, True), (1, True), (2, True), (3, False), (4, False)]

1 个答案:

答案 0 :(得分:0)

您可以通过遵循指定规则的简单明了的列表理解来构建它:

如果第0列和第1列均为0,而第2列和第3列均为0-或者- 第0列和第1列不是{0,第2列和第3列都不是0,则该行将返回True,否则返回False

import pandas as pd
df = pd.DataFrame({1: [2, 4, 0, 0, 2], 2: [5, 6, 0, 0, 34], 3: [6, 12, 0, 3, 0], 4: [6, 7, 0, 7, 0]})
x = [(i, (all(df.iloc[i, 0:2] == 0) and (all(df.iloc[i, 2:4] == 0)) or (
            any(df.iloc[i, 0:2] != 0) and (any(df.iloc[i, 2:4] != 0))))) for i in df.index]

返回

[(0, True), (1, True), (2, True), (3, False), (4, False)]