繁体   English   中英

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

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

我试图将几个特定的​​列乘以多行的一部分,并从每个结果中创建一个新列。 我无法在之前的 stackoverflow 问题或谷歌上真正找到我的问题的答案,所以也许你们中的一个可以提供帮助。

我想指出,我是 Python 的初学者,因此对于任何明显的问题或奇怪的代码,请提前道歉。

这是我的 DataFrame 目前的样子: 在此处输入图片说明

因此,对于列 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 列。

先感谢您!

杰夫

您可以首先使用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 中,列的顺序、列名和索引的长度必须相同。

获取二维数组,因此通过构造函数创建 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM