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

nev*_*int 6 python pandas

我有以下数据框:

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],         
                   })
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

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
Run Code Online (Sandbox Code Playgroud)

我想要做的是基于FavCol但保持第一行Fixy完整对数据框进行排序(不区分大小写)。结果是这样的:

  FavCol  sample1  sample2  sample3
    Fixy     20.3      130        1
   alber      3.0        4        4
   Macky     25.3      150        2
   querk      3.1      173       12
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

更新

我在复制 [用户:John Galt] 时遇到问题。有了这个数据:

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
Run Code Online (Sandbox Code Playgroud)

这段代码:

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
Run Code Online (Sandbox Code Playgroud)

它产生这个:

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'
Run Code Online (Sandbox Code Playgroud)

dmxaa修好后没有出来pbs dmso5%

Zer*_*ero 8

小写排序有点棘手。因此,您可以创建一个新lowerFavCol

In [83]: df['lower'] = df['FavCol'].str.lower()
Run Code Online (Sandbox Code Playgroud)

用于.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
Run Code Online (Sandbox Code Playgroud)

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