首页 > 解决方案 > 如何将数据框除以同一数据框的另一列

问题描述

由于对循环/迭代/矩阵/等缺乏了解,我陷入了数据帧的问题。

所以我有一个数据框或一个数组(不管怎样):

initial = [[1,2,3,3], [4,5,6,6],[7,8,9,9]]

我需要将 array/df 中除最后一列之外的所有值逐行除以最后一列的值,以便获得结果:

result = [[0.33, 0.66, 1], [0.66, 0.83, 1],[0.77, 0.88,1]]

因此,例如,我将使用第一个列表,如下所示:1/3、2/3、3/3,然后取下一个列表并划分 4/6、5/6、6/6,依此类推...

我想要么将结果存储在单独的 df/array 中,要么覆盖原始的 df/array,无论哪种效果最好。注意(如果重要):最后一列不包含 0(空值)或 NaN,并且值等于或大于前面列中的值(基于每一行)。

我还想知道我是否可以根据第 0 列之前的列确定要经过的行(最初我删除了此列以仅包含数字并稍后添加,但如果将计算与包含唯一字符串的该列相关的行(它们被设置为我的原始数据框的索引)

问题和结果

标签: pythonpandas

解决方案


  • OP 中的样本数据是列表的列表,而不是数组。
  • 以下示例将使用 pandas 数据框,因为这就是问题的标记。
  • .div()与_axis=0
  • 可以使用.iloc.loc选择列[]
  • 添加.round(2)到末尾result以设置小数位数。
  • 我还想知道我是否可以根据第 0 列之前的列确定要经过的行:即df.index
    • df.iloc[:, :3].div(df.index, axis=0)
import pandas as pd

# sample dataframe
df = pd.DataFrame({0: [1, 4, 7], 1: [2, 5, 8], 2: [3, 6, 9], 3: [3, 6, 9]})

# display(df)
 0  1  2  3
 1  2  3  3
 4  5  6  6
 7  8  9  9

# divide
result = df.iloc[:, :3].div(df[3], axis=0)

# display(result)
       0        1   2
0.333333 0.666667 1.0
0.666667 0.833333 1.0
0.777778 0.888889 1.0

推荐阅读