猿问

如何通过两个独立的列对矩阵进行排序?

我最近开始编程,我的任务是根据药物剂量与安慰剂找出药物不同反应的平均值。我有一个 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)


噜噜哒
浏览 189回答 1
1回答

隔江千里

你熟悉 Pandas 的groupby操作吗?这使您可以按组进行推理,而无需显式对表进行排序一个简单的例子:>>> import pandas as pd>>> df = pd.DataFrame(data={'col1': [0,0,1,1], 'col2': [1,2,3,4]})>>> df   col1  col20     0     11     0     22     1     33     1     4>>> df.groupby('col1').mean()      col2col10      1.51      3.5
随时随地看视频慕课网APP

相关分类

Python
我要回答