2015-05-29 94 views
2

我有以下的數據幀:如何大熊貓數據幀排序行的子集

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完好無損。導致:

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沒有固定pbs dmso5%後問世。

回答

2

小寫排序有點棘手。所以,你可以從FavCol

In [83]: df['lower'] = df['FavCol'].str.lower() 

使用.loc創建一個新的lower列添加排序順序

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列。

+0

我有問題再現你的代碼。請參閱我的更新。 – neversaint

+0

'dmxaa'的確出現在固定的'pbs dmso5%'之後。你能再次檢查嗎?並且,提及你的'pd .__ version__'? – Zero

+0

我的版本是''0.16.1'。 – neversaint