我有一个这样的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)]
答案 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)]