我试图将几个特定的​​列乘以多个行的一部分,并根据每个结果创建一个新列。我在以前的stackoverflow问题或google中都找不到我的问题的答案,所以也许你们中的一个可以提供帮助。

我想指出的是,我是Python的初学者,因此对于任何明显的问题或奇怪的代码,我们深表歉意。

这是我的DataFrame当前的样子:
python - 尝试将特定的列乘以Pandas DataFrame(Python)中多行的一部分-LMLPHP

因此,对于Doctor_1的Hospital Rank列,我想将其所有数字乘以Hospital_1的Doctor Rank列第一行的值,直到Doctor by Hospital_10的列Rank。这将导致:

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


等等。
我想为每个Doctor_列执行此操作。因此,对于Doctor_2,其值应乘以所有那十列的第二行(Hospital_。Doctor_3的DoctorRank,再乘以第三行,依此类推。

到目前为止,我已经在新的DataFrame中将“按Hospital_列的Doctor Rank”转换为:
python - 尝试将特定的列乘以Pandas DataFrame(Python)中多行的一部分-LMLPHP

并尝试将其乘以Doctor_列的医院等级的DataFrame。这里,第一个df的第一列应乘以第二个df的第一列。 (以及第二列*第二列,依此类推):
python - 尝试将特定的列乘以Pandas DataFrame(Python)中多行的一部分-LMLPHP

但是我目前的公式

preferences_of_doctors_and_hospitals_doctors_ranking.mul(preferences_of_doctors_and_hospitals_hospitals_ranking_transposed)


显然不起作用:
python - 尝试将特定的列乘以Pandas DataFrame(Python)中多行的一部分-LMLPHP

有人知道我在做什么错吗,我该如何解决?也许我可以编写一个for循环,以便为列的每个乘法创建一个新列?因此,DF3的Multiplication_column_1 = DF1的第1列* DF2的第1列,DF3的Multiplication_column_2 = DF1的第2列* DF2的第2列。

先感谢您!

杰夫

最佳答案

您可以通过先过滤filtervalues创建列来创建多个2d数组:

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中的列顺序必须相同,列名称和索引的长度必须相同。

获取2d数组,因此通过构造函数创建DataFrame并将join设置为原始数组:

df = df.join(pd.DataFrame(arr, index=df.index).add_prefix('Multiplied '))

关于python - 尝试将特定的列乘以Pandas DataFrame(Python)中多行的一部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54403482/

10-12 15:55