栏目按实验室排序

2024-10-03 00:30:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有20列的df。第一列标题是gene,接下来的19列是用于不同的实验。你知道吗

gene    1-1164-KO-aa8   22-1264-wt-aa8   15-1175-wt-aa9  27-1195-KO-aa9   ...
abc      11.9898           11.9898         11.9898         11.9898        ...
cde      11.9898           11.9898         11.9898         11.9898        ... 
 .
 .

我需要根据列的标签来排序。你知道吗

将第一列基因保留在适当的位置,并仅根据标签的这一部分(wt-aa8、wt-aa9、KO-aa8、KO-aa9)对其余的进行排序。你知道吗

首先是基因,然后是所有的wt-aa8,接着是所有的wt-aa9,然后是所有的KO-aa8,最后是所有的KO-aa9。但排序后的列需要具有原始的全名(如1-1164-KO-aa8)。你知道吗

所以应该是这样的:

gene    22-1264-wt-aa8  22-1264-wt-aa8  1-1164-KO-aa8   27-1195-KO-aa9
abc      11.9898         11.9898         11.9898          11.9898
cde      11.9898         11.9898         11.9898          11.9898

通常我只在标题上写数字,然后做一个测向排序这显然不起作用,不幸的是,我不得不保留原来的列名。你知道吗

有什么办法吗?你知道吗

链接到示例df。 https://drive.google.com/file/d/0Bzv1SNKM1p4uYW9yQWJNT21NNVU/view?usp=sharing


Tags: 标题df排序链接基因数字标签ko
2条回答

如果在本例中它只是一个单列,通常您可以按数字排序,尝试在excel中打开它,然后您可以将列拖放到正确的顺序,然后再次保存。你知道吗

或者,将标头重命名为1.1-1164-KO-aa8 3.22-1264-wt-aa8 2.15-1175-wt-aa9 7.27-1195-KO-aa9

然后按数字排序。你知道吗

明确的黑客,但20列相当快。你知道吗

如果具有相似字符串的列只需要彼此相邻,那么您可以非常简单地做到这一点。你知道吗

coldict = {c: c.split('-', 2)[2] for c in df.columns[1:]}
df = df[['gene'] + sorted(df.ix[:, 1:].columns, key=lambda x: coldict[x])]

首先,制作一个只包含列的“可排序”部分的字典。我们只使用第一列之后的列来排除gene列。分割是基于您包含的文件,而不是示例中的文件,但是您可以修改它。你知道吗

其次,创建一个dataframe,其中列顺序不是由原始列名决定的,而是由字典中的(排序的)值决定的。你知道吗

相关问题 更多 >