如何通过两个独立的列对矩阵进行排序?
How do I sort a matrix via two indepedent columns?
我最近开始编程,我的任务是根据药物剂量与安慰剂的不同,找出药物不同反应的平均值。我有一个 4 列 Excel 文件,该文件分别分为 Drug_1_Dosage
、Drug_1_Response
、Drug_2_Dosage
、Drug_2_Response
。
我试图在 Jupyter notebook 中对这些值进行排序,以便 Drug_1_Dosage
为 1-8
的所有实例都以升序方式进行响应排序(有超过 1 行例如 dosage 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]
到这里为止一切正常,我可以独立地select每一列。我尝试了以下排序但没有成功:
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)
但是 returns
[[ 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)
你熟悉Pandas'groupby操作吗?这使您可以按组进行推理,而不必明确地对 table
进行排序
一个简单的例子:
>>> import pandas as pd
>>> df = pd.DataFrame(data={'col1': [0,0,1,1], 'col2': [1,2,3,4]})
>>> df
col1 col2
0 0 1
1 0 2
2 1 3
3 1 4
>>> df.groupby('col1').mean()
col2
col1
0 1.5
1 3.5
(感谢 @Sean-Pianka 建议我 post 我的评论作为单独的答案)
我最近开始编程,我的任务是根据药物剂量与安慰剂的不同,找出药物不同反应的平均值。我有一个 4 列 Excel 文件,该文件分别分为 Drug_1_Dosage
、Drug_1_Response
、Drug_2_Dosage
、Drug_2_Response
。
我试图在 Jupyter notebook 中对这些值进行排序,以便 Drug_1_Dosage
为 1-8
的所有实例都以升序方式进行响应排序(有超过 1 行例如 dosage 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]
到这里为止一切正常,我可以独立地select每一列。我尝试了以下排序但没有成功:
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)
但是 returns
[[ 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)
你熟悉Pandas'groupby操作吗?这使您可以按组进行推理,而不必明确地对 table
进行排序一个简单的例子:
>>> import pandas as pd
>>> df = pd.DataFrame(data={'col1': [0,0,1,1], 'col2': [1,2,3,4]})
>>> df
col1 col2
0 0 1
1 0 2
2 1 3
3 1 4
>>> df.groupby('col1').mean()
col2
col1
0 1.5
1 3.5
(感谢 @Sean-Pianka 建议我 post 我的评论作为单独的答案)