【发布时间】:2019-11-07 12:04:50
【问题描述】:
我有一个包含 4 列的数据框,我想执行以下步骤(最好在一个代码中): - 过滤 4 列之和低于 0.9 的行 - 将每行中的每个单元格相乘,使行的总和为 0.9 - 如果任何单元格中有 0,则该单元格保持不变(因为将 0 与任何值相乘仍然为 0) - 最后显示所有行,包括未更改的行
这是一个示例数据框:
df = pd.DataFrame({'A':[0.03, 0.0, 0.7],
'B': [0.1234, 0.4, 0.333],
'C': [0.5, 0.4, 0.0333]})
print (df)
Name A B C
0 Bread 0.03 0.1234 0.5000
1 Butter 0.00 0.4000 0.4000
2 Cheese 0.70 0.3330 0.0333
Sum = df["A"]+df["B"]+df["C"]
print (Sum)
0 0.6534
1 0.8000
2 1.0663
现在只有第 0 行和第 1 行应该受算法影响
我用过这个部分在这里工作:
df = df4.mul(0.9/df4.sum(axis=1),axis=0)
但我现在知道如何仅使用 A 到 C 列,以及如何首先过滤总和低于 0.9 的行,然后如何再次显示所有行。
所以我想要的结果是这样的:
print (df)
Name A B C
0 Bread 0.0414 0.170292 0.690000
1 Butter 0.0000 0.452000 0.452000
2 Cheese 0.70 0.3330 0.0333
重要的是,所有列(包括产品列)和行应该仍然存在,并且格式是包含所有行的数据框。我只在下面添加了 sum 函数,看看它们加起来是 0.9 或更多。
Sum = df["A"]+df["B"]+df["C"]
print (Sum)
0 0.9
1 0.9
2 1.0663
【问题讨论】:
-
你需要列的中间值吗?我的意思是,如果行的总和
标签: python python-3.x pandas dataframe