使用python将文本文件中的数据分组

2024-10-06 07:14:10 发布

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

我有一个制表符分隔的文本文件,例如:

small example

chr15   60644581    60644675    ANXA2   ENST00000332680.4   annotated
chr15   60643922    60644018    ANXA2   ENST00000332680.4   annotated
chr15   60643391    60643450    ANXA2   ENST00000332680.4   annotated
chr15   60641273    60641396    ANXA2   ENST00000332680.4   annotated
chr15   60639831    60639888    ANXA2   ENST00000332680.4   annotated
chr14   25443870    25444024    STXBP6  ENST00000550887.1   annotated
chr14   25326232    25326363    STXBP6  ENST00000550887.1   annotated
chr14   25325141    25325307    STXBP6  ENST00000550887.1   annotated
chr14   25288242    25288400    STXBP6  ENST00000550887.1   annotated

我想做另一个有6列但更少行的制表符分隔文件。事实上,我想总结一下这些行。具有相同第4列的行必须汇总在一行中事实上,首先我需要根据第4列对行进行分组。新行具有相同的第1列、第4列、第5列和第6列,但第2列来自每组的第一行,第3列来自每组的最后一行。在小示例中,我们有两个基于第4列的组,因此对于第一个组,我们将有这一行:

^{pr2}$

小例子的预期输出如下:

expected output

^{3}$

我尝试使用下面的命令在python中执行此操作,但是它没有返回预期的输出。你知道怎么修吗?在

import pandas as pd
p = pd.read_csv("myfile.txt", sep='\t')
data = p.groupby('4th column')
mylist = []
for i in range(len(data)):
    new_line = 'data[0], data[1], data[2], data[3], data[4], data[5]'
    mylist.append(new_line)
    df = pd.DataFrame(mylist)
    df.to_csv('outfile.txt', sep='\t', index=None, header=False)

Tags: csvtxtdfnewdatalinesep制表符
1条回答
网友
1楼 · 发布于 2024-10-06 07:14:10

您没有指定第1列、第5列和第6列的分组值应该是什么,所以我假设任何值都可以,并将使用第一列作为第二列。在

您需要的是groupby之后的聚合,它将给出正确的值。将{column name:aggregation function name}对的字典传递给agg,尤其是{}。在

import pandas as pd
p = pd.read_csv("myfile.txt", names=["1", "2", "3", "4", "5", "6"], header=None, sep='\t')

df = p.groupby("4").agg({"1": "first", "2": "first", "3": "last", "5": "first", "6": "first"})

df.reset_index(inplace=True)
df = df.reindex(sorted(df.columns), axis=1)
df.to_csv('outfile.txt', sep='\t', index=False, header=None)

相关问题 更多 >