我有一个三列的pandas数据框,并希望将每行的浮点数乘以/增加相同的数量,直到所有三个单元格的总和(一行)满足该critera(值等于或大于0.9)< / p>
df = pd.DataFrame({'A':[0.03, 0.0, 0.4],
'B': [0.1234, 0.4, 0.333],
'C': [0.5, 0.4, 0.0333]})
结果: 将每行中的不同单元格相乘,以使每行中所有三个单元格的总和为0.9(因为我尝试通过简单的乘法接近,所以每行的总和不完全为0.9,因此实际结果将为0.9) 。重要的是,为0的单元格应保持为0。
print (df)
A B C
0 0.0414 0.170292 0.690000
1 0.0000 0.452000 0.452000
2 0.4720 0.392940 0.039294
答案 0 :(得分:2)
您可以在axis=1
上求和,然后用0.9减去,然后用df.shape[1]
除以将其相加:
df.add((0.9-df.sum(axis=1))/df.shape[1],axis=0)
A B C
0 0.112200 0.205600 0.582200
1 0.033333 0.433333 0.433333
2 0.444567 0.377567 0.077867
答案 1 :(得分:0)
您要在行上应用缩放功能:
def scale(xs, target=0.9):
"""Scale the features such that their sum equals the target."""
xs_sum = xs.sum()
if xs_sum < target:
return xs * (target / xs_sum)
else:
return xs
df.apply(scale), axis=1)
例如:
df = pd.DataFrame({'A':[0.03, 0.0, 0.4],
'B': [0.1234, 0.4, 0.333],
'C': [0.5, 0.4, 0.0333]})
df.apply(scale, axis=1)
应该给出:
A B C
0 0.041322 0.169972 0.688705
1 0.000000 0.450000 0.450000
2 0.469790 0.391100 0.039110
该数据框的行总计为0.9:
df.apply(scale), axis=1).sum(axis=1)
0 0.9
1 0.9
2 0.9
dtype: float64