[英]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.