Python Pandas:根据第一列的内容对CSV文件进行排序

时间:2018-11-13 11:13:42

标签: python-3.x pandas csv parsing columnsorting

我有一个包含以下内容的CSV文件:

R10_0_yrdi_391    111    1.11    1.0    1.1    111.0
R10_0_yfyrn_9132    222    2.22    2.0    2.2    222.0
R10_0_hfeisk_3    333    3.33    3.0    3.3    333.0
R20_0_yrdi_391    444    4.44    4.0    4.4    444.0
R20_0_yfyrn_9132    555    5.55    5.0    5.5    555.0
R20_0_hfeisk_3    666    6.66    6.0    6.6    666.0

现在,我想生成一个第一列已排序的新CSV,以便将与R10_0R20_0值对应的相同值并排放置:

R10_0_yrdi_391    111    1.11    1.0    1.1    111.0
R20_0_yrdi_391    444    4.44    4.0    4.4    444.0
R10_0_yfyrn_9132    222    2.22    2.0    2.2    222.0
R20_0_yfyrn_9132    555    5.55    5.0    5.5    555.0
R10_0_hfeisk_3    333    3.33    3.0    3.3    333.0
R20_0_hfeisk_3    666    6.66    6.0    6.6    666.0

另一个问题是第一列R10_0_R20_0_的那部分是固定的,但后面部分的长度即。 _yrdi_391_yfyrn_9132_hfeisk_3是可变的。 我尝试使用:

f = df.columns.values.tolist()
df.sort_values(by=f[:1])

但是它把所有R10_0_R20_0_合并在一起。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我相信您需要2个参数#create index by first column by position df = df.set_index(df.columns[0]) #create index by name of first column #df = df.set_index('a') a = sorted(df.index, key=lambda x: (x.split('_')[2:], x.split('_')[:2]), reverse=True) df = df.reindex(a) print (df) b c d e f a R20_0_yrdi_391 444 4.44 4.0 4.4 444.0 R10_0_yrdi_391 111 1.11 1.0 1.1 111.0 R20_0_yfyrn_9132 555 5.55 5.0 5.5 555.0 R10_0_yfyrn_9132 222 2.22 2.0 2.2 222.0 R20_0_hfeisk_3 666 6.66 6.0 6.6 666.0 R10_0_hfeisk_3 333 3.33 3.0 3.3 333.0 的功能和reindex来更改顺序:

a = sorted(df.index, key=lambda x: (x.split('_')[2:], x.split('_')[:2]))
df = df.reindex(a)
print (df)

                    b     c    d    e      f
a                                           
R10_0_hfeisk_3    333  3.33  3.0  3.3  333.0
R20_0_hfeisk_3    666  6.66  6.0  6.6  666.0
R10_0_yfyrn_9132  222  2.22  2.0  2.2  222.0
R20_0_yfyrn_9132  555  5.55  5.0  5.5  555.0
R10_0_yrdi_391    111  1.11  1.0  1.1  111.0
R20_0_yrdi_391    444  4.44  4.0  4.4  444.0

或者:

(focus)