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

时间:2019-01-28 13:53:47

标签: python pandas dataframe multiplication

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

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

这是我的数据框目前看起来像: enter image description here

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

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

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

到目前为止,我已经Hospital_列在一个新的数据帧调换医生的排名: enter image description here

和试图通过Doctor_列医院的评级的数据帧乘以此。这里,第一个df的第一列应乘以第二个df的第一列。 (和第二列*第二列等): enter image description here

但是,我的当前配方

preferences_of_doctors_and_hospitals_doctors_ranking.mul(preferences_of_doctors_and_hospitals_hospitals_ranking_transposed)

显然是不工作: enter image description here

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

提前谢谢!

杰夫

2 个答案:

答案 0 :(得分:1)

您可以通过先用filtervalues过滤列来创建多个二维数组:

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 '))

答案 1 :(得分:0)

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

如果我正确理解了这个问题,我认为您可以解决这个问题。 您可以创建另一列,告诉熊猫将第一列的值乘以第二列的值。

与您的特定情况类似,但有两列以上:

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"]