簡體   English   中英

如何在Pandas數據框中對行的子集進行排序

[英]How to sort subset of rows in Pandas data frame

我有以下數據框:

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

我怎樣才能做到這一點?

更新

我有問題再現[用戶: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

這段代碼:

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%之后沒有出來。

小寫排序有點棘手。 因此,您可以從FavCol創建一個新的lower

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM