我有一个包含四列的数据框,只想将总和小于0.9的每一行的浮点数乘以相同的数量,直到每一行的总和等于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列。
答案 0 :(得分:0)
我认为您正在使行和列之间有些混乱。
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
因此,如果您只想将df.mul(0.9/df.sum())
用于总和小于0.9
的列,则可以使用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