繁体   English   中英

按列表排列行 python

[英]arrange rows by list python

我写不出好的剧本。 脚本顺序表(第一列)按顺序。 它应该安排每一行,并且只给出第一次出现....我不知道我该如何解决它。

示例表

A       B
1211    ds
3245    ssssd
3114    dsf
3114    apple
4324    sssvdff
4324    weewr
4324    bla 
4324    orange
1211    something
1211    blue  

订单清单示例

4324\n
3245\n
3114\n
1211\n

有序表(我得到的)

A       B
4324    sssvdff
3245    ssssd
3114    dsf
1211    something

有序表(我想要的)

A       B
4324    sssvdff
4324    weewr
4324    bla 
4324    orange
3245    ssssd
3114    dsf
3114    apple
1211    something
1211    blue  

代码:

import re

def map_ids_to_row_list(_id):
    _id = _id.strip('\n')
    for s in lines:
        if re.search(_id,s):
            return s

file = open('Lorder.txt', 'r').readlines()
names = []
for name in file:
    names.append(name.strip('\n'))

name = 'table_data.txt'
name_split = name.rsplit('.',1)
new_name = name_split[0] + '_sorted.csv'
    
table = open(name,'r')
table_read = table.readlines()
    
lines = []

for s in table_read:
    lines.append(s)
    
ordered_table = list(map(map_ids_to_row_list, names))
    
with open(new_name,'w') as fs:
    for row in ordered_table:
        fs.write(str(row))

代码:

l = [4324,3245,3114,1211]
df.A = df.A.astype("category")
df.A = df.A.cat.set_categories(l)
df.sort_values(["A"]) 

Output:

      A           B
4   4324    sssvdff
5   4324    weewr
6   4324    bla
7   4324    orange
1   3245    ssssd
2   3114    dsf
3   3114    apple
0   1211    ds
8   1211    something
9   1211    blue

另一种方法可能是回退到本机 python 排序 -

order_list = [4324, 3245, 3114, 1211]
pd.DataFrame.from_records(sorted(df.to_records(index=False), key=lambda x: order_list.index(x[0])), columns=df.columns)

Output

      A          B
0  4324    sssvdff
1  4324      weewr
2  4324        bla
3  4324     orange
4  3245      ssssd
5  3114        dsf
6  3114      apple
7  1211         ds
8  1211  something
9  1211       blue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM