尝试将特定列乘以 Pandas DataFrame (Python) 中多行的一部分
Trying to multiply specific columns, by a portion of multiple rows in Pandas DataFrame (Python)
我正在尝试将一些特定的列乘以多行的一部分,并根据每个结果创建一个新列。我无法在之前的 Whosebug 问题或 google 上真正找到我的问题的答案,所以也许你们中的一个人可以提供帮助。
我想指出,我是 Python 的新手,所以对于任何明显的问题或奇怪的代码,我们深表歉意。
这是我的 DataFrame 目前的样子:
因此,对于 Doctor_1 的医院排名列,我想将其所有数字乘以医生排名列第一行的值 Hospital_1,直到医生排名列通过 Hospital_10。这将导致:
1*1
2*1
3*1
4*4
...
等等。
我想为每个 Doctor_ 专栏执行此操作。因此,对于 Doctor_2,其值应乘以所有这十列的第二行(医院的医生等级_。Doctor_3,乘以第三行等
到目前为止,我已经在新的 DataFrame 中按 Hospital_ 列调换了 Doctor 的排名:
并尝试将其乘以医院排名的 DataFrame by 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
and 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
如果我正确理解了这个问题,我认为你把它复杂化了。
您可以创建另一列,告诉 pandas 将第一列的值乘以第二列。
与您的超过 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"]
我正在尝试将一些特定的列乘以多行的一部分,并根据每个结果创建一个新列。我无法在之前的 Whosebug 问题或 google 上真正找到我的问题的答案,所以也许你们中的一个人可以提供帮助。
我想指出,我是 Python 的新手,所以对于任何明显的问题或奇怪的代码,我们深表歉意。
这是我的 DataFrame 目前的样子:
因此,对于 Doctor_1 的医院排名列,我想将其所有数字乘以医生排名列第一行的值 Hospital_1,直到医生排名列通过 Hospital_10。这将导致:
1*1
2*1
3*1
4*4
...
等等。 我想为每个 Doctor_ 专栏执行此操作。因此,对于 Doctor_2,其值应乘以所有这十列的第二行(医院的医生等级_。Doctor_3,乘以第三行等
到目前为止,我已经在新的 DataFrame 中按 Hospital_ 列调换了 Doctor 的排名:
并尝试将其乘以医院排名的 DataFrame by 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
and 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
如果我正确理解了这个问题,我认为你把它复杂化了。 您可以创建另一列,告诉 pandas 将第一列的值乘以第二列。
与您的超过 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"]