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

时间:2018-12-28 13:40:21

标签: python pandas

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

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列对行进行分组。新行具有相同的第一,第四,第五和第六列,但第二列来自每个组的第一行,第三列来自每个组的最后一行。在小示例中,我们基于第4列有2个组,因此对于第一个组,我们将有以下行:

chr15   60644581    60639888    ANXA2   ENST00000332680.4   annotated

,小示例的预期输出将如下所示:

expected output

chr15   60644581    60639888    ANXA2   ENST00000332680.4   annotated
chr14   25443870    25288400    STXBP6  ENST00000550887.1   annotated

我正在尝试使用以下命令在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)

1 个答案:

答案 0 :(得分:0)

您没有指定第1列,第5列和第6列的分组值应该是什么,因此我假设任何值都可以,并且将与第2列一样使用 first

您要查找的是 groupby 之后的汇总,该汇总将提供适当的值。将{列名称:聚合函数名称}对的字典传递给 agg ,尤其是{**"2": "first"**, **"3": "last"**}

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)