尝试将特定列乘以 Pandas DataFrame (Python) 中多行的一部分

Trying to multiply specific columns, by a portion of multiple rows in Pandas DataFrame (Python)

我正在尝试将一些特定的列乘以多行的一部分,并根据每个结果创建一个新列。我无法在之前的 Whosebug 问题或 google 上真正找到我的问题的答案,所以也许你们中的一个人可以提供帮助。

我想指出,我是 Python 的新手,所以对于任何明显的问题或奇怪的代码,我们深表歉意。

这是我的 DataFrame 目前的样子:

因此,对于 Doctor_1 的医院排名列,我想将其所有数字乘以医生排名列第一行的值 Hospital_1,直到医生排名列通过 Hospital_10。这将导致:

1*1
2*1
3*1
4*4
...

等等。 我想为每个 Doctor_ 专栏执行此操作。因此,对于 Doctor_2,其值应乘以所有这十列的第二行(医院的医生等级_。Doctor_3,乘以第三行等

到目前为止,我已经在新的 DataFrame 中按 Hospital_ 列调换了 Doctor 的排名:

并尝试将其乘以医院排名的 DataFrame by Doctor_ 列。这里第一个 df 的第一列应该乘以第二个 df 的第一列。 (和第二列 * 第二列等):

但是我现在的公式

preferences_of_doctors_and_hospitals_doctors_ranking.mul(preferences_of_doctors_and_hospitals_hospitals_ranking_transposed)

显然不起作用:

有谁知道我做错了什么以及我该如何解决这个问题?也许我可以写一个 for 循环,以便为每个列的乘法创建一个新列?所以 DF3 的 Multiplication_column_1 = DF1 的第 1 列 * DF2 的第 1 列和 DF3 的 Multiplication_column_2 = DF1 的第 2 列 * DF2 的第 2 列。

提前致谢!

杰夫

您可以通过先使用 filter and values 过滤列来创建多个二维数组:

arr = df.filter(like='Rank of Hospital by').values * df.filter(like='Rank of Doctor by').values

或者:

arr = (preferences_of_doctors_and_hospitals_doctors_ranking.values * 
       preferences_of_doctors_and_hospitals_hospitals_ranking_transposed.values)

注意 - 必须在两个过滤的 DataFrame 中对列进行相同的排序、相同长度的列名称和索引。

得到二维数组,所以通过构造函数创建DataFrame,join到原来的:

df = df.join(pd.DataFrame(arr, index=df.index).add_prefix('Multiplied '))
df = pd.DataFrame({"A":[1,2,3,4,5], "B":[6,7,8,9,10]})
df["mul"] = df["A"] * df["B"]

print(df)

输出:

   A   B  mul
0  1   6    6
1  2   7   14
2  3   8   24
3  4   9   36
4  5  10   50

如果我正确理解了这个问题,我认为你把它复杂化了。 您可以创建另一列,告诉 pandas 将第一列的值乘以第二列。

与您的超过 2 列的具体情况更相似:

df = pd.DataFrame({"A":[1,2,3,4,5], "B":[6,7,8,9,10], "C":[11,12,13,14,15]})
df["mul"] = df["A"] * df["B"] * df["C"]