由于对循环/迭代/矩阵/等缺乏理解,我被困在数据帧的问题上。
所以我有一个数据框或一个数组(无论什么都有效):
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 列之前的列来确定要经过的行(最初我删除此列以仅包含数字并稍后添加,但这将是绝对的另外,如果要计算与包含唯一字符串的列相关的行(它们被设置为我的原始数据框的索引)
答案 0 :(得分:0)
.div()
与 axis=0
一起使用.iloc
、.loc
或 []
选择列。
.loc
.round(2)
的末尾添加 result
以设置小数位数。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
答案 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 将为您正确广播尺寸。
详细查看切片语法,因为它比本示例中显示的更灵活。
但是我没有完全理解你问题的第二部分。