Попытка умножить определенные столбцы на часть нескольких строк в Pandas DataFrame (Python) - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь умножить несколько определенных столбцов на часть нескольких строк и создаю новый столбец из каждого результата.Я не мог найти ответ на свой вопрос в предыдущих вопросах stackoverflow или в Google, так что, возможно, один из вас может помочь.

Я хотел бы отметить, что я довольно новичок в Python, поэтому извинения впереддля любых очевидных вопросов или странного кода.

Вот так выглядит мой DataFrame: enter image description here

Итак, для столбца 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 его значения должны быть умножены на второй ряд всех этих десяти столбцов (Rank of Doctor на Hospital_. Doctor_3, умноженный на третий ряд и т. Д.)

До сих пор я переставлял Rank of Doctor наБольницы_ в новом DataFrame: enter image description here

и попытались умножить это на фрейм данных ранга больницы на столбцы 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

Кто-нибудь знает, что я делаю неправильно и как я могу это исправить? Может быть, я мог бы написать цикл для, чтобы новый столбец создавался для каждогоумножение столбцов? Итак, Multiplication_column_1 из DF3 = Столбец 1 из DF1 * Столбец 1 из DF2 и Multiplication_column_2 из DF3 = Столбец 2 из DF1 * Столбец 2 из DF2.

Заранее спасибо!

Джеф

Ответы [ 2 ]

0 голосов
/ 28 января 2019
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"]


0 голосов
/ 28 января 2019

Вы можете создать несколько 2-мерных массивов, созданных путем фильтрации столбцов с помощью filter и values first:

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)

Примечание - необходимо одинаковое упорядочение столбцов, одинаковая длина имен столбцов и индекс в обоих отфильтрованных кадрах данных.

Получить массив 2d, поэтому создайте DataFrameпо конструктору и join до оригинала:

df = df.join(pd.DataFrame(arr, index=df.index).add_prefix('Multiplied '))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...