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

标签 python pandas dataframe multiplication

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

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

这是我的 DataFrame 目前的样子: enter image description here

因此,对于列 Rank of Hospital by Doctor_1,我想将其所有数字乘以列 Rank 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 的排名: enter image description here

并尝试将其乘以医院排名的 DataFrame by 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的第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 中的列顺序、列名称和索引的长度必须相同。

获取二维数组,通过构造函数和join创建DataFrame转为原文:

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

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

相关文章:

python - 如何在 neo4django 模型上存储浮点值

python - 将 SciPy 编译为 Android - 是否已完成,关于如何将 FORTRAN 代码编译为 Android Arm 的任何帮助

python - 检查 pandas.Timestamp 是否在 pandas.Period 中

xml - 从 XML 文件随机采样到 R 中的数据帧

python - 将 pandas 数据框创建为另一个行的函数连接的惯用方法

python - 无法安装 Python 和 GDAL(DLL 加载失败)

python - 使用模型推断批处理与使用 pytorch 的个人时的不同结果

python - 使用 Python 将具有不同 UTC 基准​​的时间戳列转换为当前 UTC

python - Pandas 按时间分组,指定开始时间非整数分钟

python - 如何使用 pandas 中的 .at 方法返回特定数据类型?