如何将数据帧除以同一数据帧的另一列

时间:2021-02-04 15:55:26

标签: python pandas

由于对循环/迭代/矩阵/等缺乏理解,我被困在数据帧的问题上。

所以我有一个数据框或一个数组(无论什么都有效):

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 列之前的列来确定要经过的行(最初我删除此列以仅包含数字并稍后添加,但这将是绝对的另外,如果要计算与包含唯一字符串的列相关的行(它们被设置为我的原始数据框的索引)

problem and result

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果 initial 是一个 numpy 数组,这很容易使用切片实现:

import numpy
initial = numpy.array([[1,2,3,3],[4,5,6,6],[7,8,9,9]])
result = initial[:,:-1]/initial[:,[-1]]

在切片中,":" 表示获取所有,":n" 获取相应维度中直到第 n 个元素(排除)的所有内容。您也可以(对于 python 列表)使用负数的反向索引。然后 numpy 将为您正确广播尺寸。

详细查看切片语法,因为它比本示例中显示的更灵活。

但是我没有完全理解你问题的第二部分。