Я недавно начал программировать, и мне было поручено найти среднее значение различных реакций лекарственного средства на основе его дозировки в сравнении с плацебо.У меня есть 4-колоночный файл Excel, который разбит на Drug_1_Dosage
, Drug_1_Response
, Drug_2_Dosage
, Drug_2_Response
соответственно.
Я пытаюсь отсортировать эти значения в блокноте Jupyter, чтобы все случаи, где Drug_1_Dosage
было 1-8
, сортировались в порядке возрастания для ответа (было более 1 строки с дозировкой 1 дляпример), также делая то же самое для Drug_2_Dosage
(но не влияя на первый).
Я хочу отсортировать их, чтобы потом вычислить среднее значение и выразить его в виде матрицы из двух столбцов.
Пока у меня есть это:
import numpy as np
import pandas as pd
file = open('/Users/Envy/Desktop/Assingment Data.csv',"r")
table = pd.read_csv('/Users/Envy/Desktop/Assingment Data.csv')
drug_1_d = table.iloc[:,0]
drug_1_r = table.iloc[:,1]
drug_2_d = table.iloc[:,2]
drug_2_r = table.iloc[:,3]
До сих пор все работает нормально, так как я могу выбрать каждый столбец независимо.Я попробовал следующее для сортировки, но безуспешно:
1) table = table.sort_values(['Dose drug 1', 'Dose drug 1'],ascending = True)
table = pd.DataFrame.as_matrix(table)
table = table[table[:,0].argsort()]
2) table.sort(order=['f1'],axis=0)
3) table.sort_values(['Dose drug 1', 'Dose drug 2'], ascending=[True])
4) table = table.sort_values([:0,:2],ascending=[True])
РЕДАКТИРОВАТЬ:
Эй, я немного подтолкнул, и это работает с кодом выше
table = table.sort_values(['Dose drug 1', 'Dose drug 1'],ascending = True)
table = pd.DataFrame.as_matrix(table)
print(table)
Но он возвращает
[[ 1 21 3 27]
[ 1 19 7 10]
[ 1 32 3 12]
...
[ 8 18 4 24]
[ 8 9 1 10]
[ 8 13 2 9]]
Это означает, что он сортирует только по столбцу 0, а не по столбцу 2, также, как я этого хочу.Любая идея, как я могу иметь оба вида независимо?
Редактировать: После большого количества проб и ошибок у меня теперь есть решение;
#Generate average response to dosage in 2 column matrix
table = pd.read_csv('Assingment Data.csv', sep=',')
final_means = pd.DataFrame()
# Grouping by Drug 1
final_means['Average Response Drug'] = table.groupby(['Dose drug 1'])['Response drug 1'].mean()
# Grouping by Drug 2
final_means['Average Response Placebo'] = table.groupby(['Dose drug 2'])['Response drug 2'].mean()
final_means.index.names = ['Dose']
print(final_means)