我正在尝试将一些特定的列乘以多行的一部分,并根据每个结果创建一个新列。我在以前的stackoverflow问题或google中都找不到我的问题的答案,所以也许你们中的一个可以提供帮助。
我想指出的是,我是Python的初学者,因此对于任何明显的问题或奇怪的代码,我们深表歉意。
因此,对于医院的排名列由Doctor_1,我要乘其所有数字被医生的列排名的第一行的值由Hospital_1直到医生的列排名由Hospital_10。这将导致:
1*1
2*1
3*1
4*4
...
,依此类推。 我想为每个Doctor_列执行此操作。因此,对于Doctor_2,其值应乘以所有那十列的第二行(Hospital_。Doctor_3的DoctorRank,再乘以第三行,依此类推。
到目前为止,我已经Hospital_列在一个新的数据帧调换医生的排名:
和试图通过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和DF3 Multiplication_column_2的= DF1 DF2 *第2列的第2栏的第1列。
提前谢谢!
杰夫
答案 0 :(得分:1)
您可以通过先用filter
和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中的列顺序相同,列名称和索引的长度相同。
获取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"]