python - 如果列的总和满足条件,则乘以特定行
问题描述
我有一个包含四列的数据框,并且只想将总和小于 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 列。
解决方案
我认为您在行和列之间造成了一些混淆。
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
推荐阅读
- python-3.x - 我无法导入函数
- reactjs - 有条件地添加需要数组的属性
- groovy - 关于在 Groovy 中省略 'return' 关键字以返回闭包块的不一致
- java - 将文本文件从文件夹移动到 Java 中的另一个文件夹
- kotlin - 从我的 recyclerView 中删除最后一项不起作用?
- discord.js - discord.js Bot V12 想要制作一种每周、一天的时钟
- python - 如何将熊猫样式应用于多列
- asp.net-core - 用户名密码通过外部身份服务器登录
- python - 需要使用数据框 pandas 中的最新日期过滤掉重复数据
- database - 动态列的数据库结构