0

df.sort_indexを使用して列ごとにデータフレームを並べ替えようとしています。2番目のこのような文字列列は、テキスト内の数字で構成されています。操作後、私は次のようになりました。

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

それは私が望んでいることではありません。最後の3行は最初にあるはずです。他のデータフレーム方法またはこれに対する克服はありますか?

4

3 に答える 3

1

1つまたは複数の列で並べ替える場合は、df.sort()を使用する必要があり、df.sort_index()はインデックスのみで並べ替えます。

于 2012-09-28T14:18:27.567 に答える
0

これにはエラーチェックや最適化はまったくありませんが、これはあなたが望むものです:

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)
于 2012-09-28T14:16:00.290 に答える
0

先物の参考のために、ここに可能な解決策があります。

    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

改善は大歓迎です。一番、

于 2012-09-28T22:41:05.493 に答える