我有以下数据框:
这看起来像这样:
我想做的是根据“FavCol”对数据框进行(不区分大小写的)排序,但保持第一行“Fixy”的完整性。结果如下:
我该如何实现这个目标?
更新:
我无法复制 [用户:John Galt] 的问题。 以下是数据:
这段代码:
它会产生这个:
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%
后没有出现。
dmxaa
确实在固定的pbs dmso5%
之后。你能再检查一下吗?并且,能否告诉我你的pd.__version__
是多少? - Zerodf.iloc[1:] = df.iloc[1:].sort('lower')
,我得到了相同的结果,没有排序。你尝试过使用version 0.16.1
吗? - neversaint16
,使用逗号的df.iloc[1:, ]
可以吗? - Zero0.16.1
中明确传递值,例如:df.loc[1:] = df[1:].sort('lower').values
,请检查更新的解决方案。 - Zero