如果列的总和满足条件,则将特定行相乘

2024-03-28 14:20:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有四列的数据帧,只想将每行的浮点数乘以相同的值,直到每行的和等于0.9。不应触摸总和已高于0.9的行

df = pd.DataFrame({'A':[0.03, 0.0, 0.4],
           'B': [0.1234, 0.4, 0.333],
           'C': [0.5, 0.4, 0.0333],
           'D': [0.8, 0.2, 0.2]})

原始数据帧:


A B C D
0 0.03 0.1234 0.5000 0.8 
1 0.00 0.4000 0.4000 0.2 
2 0.40 0.3330 0.0333 0.2 

列总和:

A: 0.43
B: 0.7564
C: 0.9333
D: 1.2

结果:将列总和小于0.9的细胞相乘,使每列三个细胞之和均为0.9。重要的是0的单元格将保持0,这不应被触摸。 所以在这种情况下,A、B和C列必须调整


Tags: 数据dataframedf原始数据情况细胞pd浮点数
1条回答
网友
1楼 · 发布于 2024-03-28 14:20:42

我想你把行和列搞混了

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[0.03, 0.0, 0.4],
           'B': [0.1234, 0.4, 0.333],
           'C': [0.5, 0.4, 0.0333],
           'D': [0.8, 0.2, 0.2]})

print(df)

      A       B       C    D
0  0.03  0.1234  0.5000  0.8
1  0.00  0.4000  0.4000  0.2
2  0.40  0.3330  0.0333  0.2

作为df.sum(1)返回

0    1.4534
1    1.0000
2    0.9663
dtype: float64

df.sum()返回

A    0.4300
B    0.8564
C    0.9333
D    1.2000
dtype: float64

因此,如果只想对总和小于0.9的列使用df.mul(0.9/df.sum()),可以使用np.where

out = np.where(df.sum()<0.9, df.mul(0.9/df.sum()), df)
out = pd.DataFrame(out, columns=df.columns)

它回来了

print(out)

          A         B       C    D
0  0.062791  0.129682  0.5000  0.8
1  0.000000  0.420364  0.4000  0.2
2  0.837209  0.349953  0.0333  0.2

相关问题 更多 >