[英]Trying to multiply specific columns, by a portion of multiple rows in Pandas DataFrame (Python)
我试图将几个特定的列乘以多行的一部分,并从每个结果中创建一个新列。 我无法在之前的 stackoverflow 问题或谷歌上真正找到我的问题的答案,所以也许你们中的一个可以提供帮助。
我想指出,我是 Python 的初学者,因此对于任何明显的问题或奇怪的代码,请提前道歉。
因此,对于列 Rank of Hospital by Doctor_1,我想将其所有数字乘以列 Rank of Doctor by Hospital_1 的第一行的值,直到列 Rank of Doctor by Hospital_10。 这将导致:
1*1
2*1
3*1
4*4
...
等等。 我想为每个 Doctor_ 列执行此操作。 因此,对于 Doctor_2,其值应乘以所有这十列的第二行(按 Hospital_ 排列的医生排名。Doctor_3,乘以第三行等。
到目前为止,我已经在新的 DataFrame 中转置了 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 的第 1 列和 DF3 的 Multiplication_column_2 = DF1 的第 2 列 * DF2 的第 2 列。
先感谢您!
杰夫
您可以首先使用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 中,列的顺序、列名和索引的长度必须相同。
获取二维数组,因此通过构造函数创建 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
如果我正确理解了这个问题,我认为你把它复杂化了。 您可以创建另一列告诉熊猫给它第一列乘以第二列的值。
更类似于您的特定案例,超过 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"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.