我有一个包含以下内容的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_0
和R20_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_
合并在一起。
任何帮助将不胜感激。
答案 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)