我正在尝试删除非零小于所述数字的列。这是我得到的代码,但给出的答案是相同的。我在做什么错?
df = pd.DataFrame([[1,0,0,0], [0,0,1,0]])
0 1 2 3
0 1 0 0 0
1 0 0 1 0
df = df.loc[:, (df.astype(bool).sum(axis=0) <= max_number_of_zeros)]
0 1 2 3
0 1 0 0 0
1 0 0 1 0
编辑- 例子-
0 1 2 3
0 1 0 0 0
1 2 0 1 0
2 0 2 3 4
3 1 1 1 1
输出将是value = 2的第0列和第2列
0 1 2 3
0 1 0 0 0
1 2 0 1 0
2 0 2 3 4
3 1 1 1 1
答案 0 :(得分:1)
我认为您需要将布尔型掩码更改为role Auto-Instantiate {
method AT-KEY (|) is raw {
my \result = callsame;
result .= new unless defined result;
result
}
}
my Hash[Real,Real] %h{Real} does Auto-Instantiate;
,将其与df.eq(0)
相同,条件从df == 0
更改为<=
:
<
详细信息:
max_number_of_zeros = 2
df = df.loc[:,df.eq(0).sum(axis=0) < max_number_of_zeros]
print (df)
0 2
0 1 0
1 2 1
2 0 3
3 1 1
编辑:
print (df.eq(0))
0 1 2 3
0 False True True True
1 False True False True
2 True False False False
3 False False False False
print (df.eq(0).sum(axis=0))
0 1
1 2
2 1
3 2
dtype: int64