根据满足所有行的条件增加几行的值

时间:2019-06-25 09:41:19

标签: python python-3.x pandas loops dataframe

我有一个三列的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

2 个答案:

答案 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