Python 熊猫:按列对文本中的数字进行排序
我正在尝试使用df.sort\u索引按列对数据帧进行排序。第二个字符串列由文本中的数字组成。手术后我有:Python 熊猫:按列对文本中的数字进行排序,python,sorting,dataframe,pandas,Python,Sorting,Dataframe,Pandas,我正在尝试使用df.sort\u索引按列对数据帧进行排序。第二个字符串列由文本中的数字组成。手术后我有: 15 rs1820451 32681212 0.441 0.493 0.5358 98.9 29 0 0.441 T:A 14 rs1820450 32680556 0.441 0.493 0.5358 98.9 29 0 0.441 G:C 38 rs1820447 32693541 0.421 0.332 0.0915 94.4 26 0 0.211 G:A 37 rs182044
15 rs1820451 32681212 0.441 0.493 0.5358 98.9 29 0 0.441 T:A
14 rs1820450 32680556 0.441 0.493 0.5358 98.9 29 0 0.441 G:C
38 rs1820447 32693541 0.421 0.332 0.0915 94.4 26 0 0.211 G:A
37 rs1820446 32693440 0.483 0.499 0.9633 100.0 30 0 0.475 G:T
7 rs1808502 32660555 0.517 0.46 0.543 100.0 30 0 0.358 C:G
24 rs17817908 32687035 0.407 0.362 0.6159 98.9 29 0 0.237 C:T
22 rs17817896 32686160 0.407 0.362 0.6159 98.9 29 0 0.237 T:A
66 rs17236946 32717247 0.492 0.453 0.7762 98.9 29 0 0.347 T:C
这不是我想要的。最后三行应该在开头。
是否有其他数据帧方法或克服方法?这根本没有错误检查或优化,但这是您想要的:
def sort_on(lines, col_idx):
return sorted(lines, key=lambda l: float(l.split()[col_idx]))
lines = """\
15 rs1820451 32681212 0.441 0.493 0.5358 98.9 29 0 0.441 T:A
14 rs1820450 32680556 0.441 0.493 0.5358 98.9 29 0 0.441 G:C
38 rs1820447 32693541 0.421 0.332 0.0915 94.4 26 0 0.211 G:A
37 rs1820446 32693440 0.483 0.499 0.9633 100.0 30 0 0.475 G:T
7 rs1808502 32660555 0.517 0.46 0.543 100.0 30 0 0.358 C:G
24 rs17817908 32687035 0.407 0.362 0.6159 98.9 29 0 0.237 C:T
22 rs17817896 32686160 0.407 0.362 0.6159 98.9 29 0 0.237 T:A
66 rs17236946 32717247 0.492 0.453 0.7762 98.9 29 0 0.347 T:C
""".splitlines()
sorted_lines = sort_on(lines, 3)
print "\n".join(sorted_lines)
如果要对一列或多列进行排序,则需要使用df.sort()、df.sort\u index()仅对索引进行排序。对于未来引用,这里提供了一个可能的解决方案
cond = ((df['L1'] != rscode) & (df['L2'] != rscode))
outname = inf + '_test'
df['L3'] = df['L1'].map(lambda x: int(str(x)[2:]))
outdata = df.drop(df[cond].index.values).sort(columns='L3', ascending=False, axis=0)
# export outdata using Datadrame.to_csv with the original df cols
欢迎改进。
最好的,你好,谢谢你的帮助。这是可行的,但不是一个可行的解决方案。这种方法a必须将我的整个数据帧传递给一个字符串。除了子类化
dataframe
和重载dataframe.iteritems
,或者使用dataframe.apply
获取提取数值的新df之外,我看不到任何明显的方法。这可能是最简单的.outdata.sort(columns='Name',ascending=True,axis=0),或者生成具有不同列结构的对象,除非我做错了什么,否则它仍然不起作用。