回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有下面的代码,它屏蔽了等于10的值,然后是下一个最接近的值。但实际上,只有在以“_ans”结尾的列中出现一次10时,我才需要应用它。所以掩码应该只出现在列“a_ans”中,因为“b_ans”中有两个10。
欢迎任何意见。谢谢</p>
<pre><code>
df = pd.DataFrame(data={'a_ans':[0,1,1,10,11],
'a_num': [1,8,90,2,8],
'b_ans': [0,10,139,10,18],
'b_num': [15,43,90,14,87]}).astype(float)
out=[]
for i in ['a_', 'b_']:
pairs = (df.loc[:,df.columns.str.startswith(i)]) # pair columns
mask1 = pairs[i+'ans'] == 10 # mask values equal to 10
mask2 = pairs[i+'ans'].eq(pairs[i+'ans'].mask(mask1).max())# get the next highest value
pairs = pairs.mask(mask1, 1001).mask(mask2, 1002) # replacing values
out.append(pairs)
</code></pre>