如何在Pandas数据框中对行的子集进行排序

时间:2015-05-29 07:07:19

标签: python pandas

我有以下数据框:

Cannot read property 'Id' of undefined

看起来像这样:

import pandas as pd
df = pd.DataFrame({'FavCol' : ['Fixy','Macky', 'querk', 'alber'],
                   'sample1' : [20.3, 25.3,3.1,3],
                   'sample2' : [130, 150,173,4],        
                   'sample3' : [1.0, 2.0,12.0,4],         
                   })

我想要做的是根据In [12]: df Out[12]: FavCol sample1 sample2 sample3 0 Fixy 20.3 130 1 1 Macky 25.3 150 2 2 querk 3.1 173 12 3 alber 3.0 4 4 对数据框进行排序(不区分大小写),但保持第一行FavCol不变。结果:

Fixy

我怎样才能做到这一点?

更新

我有问题再现[用户:John Galt]。 有了这些数据:

  FavCol  sample1  sample2  sample3
    Fixy     20.3      130        1
   alber      3.0        4        4
   Macky     25.3      150        2
   querk      3.1      173       12

这段代码:

Group No.   Abbr. of test substance Route   Time (hrs)  Dose (/body)    Conc.   Volume of dosage (/body)    # of mouse
1   PBS DMSO5%  i.d.    6   0 mg    0 mg/ mL    0.1 mL  3
2   MPLA    i.d.    6   0.01 mg 0.1 mg/ mL  0.1 mL  3
3   MALP2s  i.d.    6   0.01 mg 0.1 mg/ mL  0.1 mL  3
4   R848    i.d.    6   0.1 mg  1 mg/ mL    0.1 mL  3
5   DMXAA   i.d.    6   0.1 mg  1 mg/ mL    0.1 mL  3

它产生了这个:

import pandas as pd
df = pd.read_table("http://dpaste.com/0JPC984.txt")
colnames = df.columns.values.tolist()
print colnames
fixed_rown = colnames[1]
df['lower'] = df[fixed_rown].str.lower()
df.loc[1:] = df[1:].sort('lower')
df
固定Out[35]: Group No. Abbr. of test substance Route Time (hrs) Dose (/body) \ 0 1 PBS DMSO5% i.d. 6 0 mg 1 2 MPLA i.d. 6 0.01 mg 2 3 MALP2s i.d. 6 0.01 mg 3 4 R848 i.d. 6 0.1 mg 4 5 DMXAA i.d. 6 0.1 mg Conc. Volume of dosage (/body) # of mouse lower 0 0 mg/ mL 0.1 mL 3 pbs dmso5% 1 0.1 mg/ mL 0.1 mL 3 mpla 2 0.1 mg/ mL 0.1 mL 3 malp2s 3 1 mg/ mL 0.1 mL 3 r848 4 1 mg/ mL 0.1 mL 3 dmxaa In [45]: pd.__version__ Out[45]: '0.16.1' 之后

dmxaa没有出来。

1 个答案:

答案 0 :(得分:4)

小写排序有点棘手。因此,您可以从lower

创建新的FavCol
In [83]: df['lower'] = df['FavCol'].str.lower()

使用.loc添加排序顺序

In [84]: df.loc[1:] = df[1:].sort('lower').values

In [85]: df
Out[85]:
  FavCol  sample1  sample2  sample3  lower
0   Fixy     20.3      130        1   fixy
1  alber      3.0        4        4  alber
2  Macky     25.3      150        2  macky
3  querk      3.1      173       12  querk

如果需要,您可以删除lower列。