我有一个用制表符分隔的文件,例如以下示例:
小例子:
chr5 112312630 112312650 31 chr5 112312630 112321662 DCP2 ENST00000543319.1
chr5 137676883 137676900 123 chr5 137676883 137676949 FAM53C ENST00000434981.2
chr5 137676900 137676949 42 chr5 137676883 137676949 FAM53C ENST00000434981.2
chr5 139944400 139944450 92 chr5 139944064 139946344 SLC35A4 ENST00000323146.3
chr5 139945450 139945500 77 chr5 139944064 139946344 SLC35A4 ENST00000323146.3
我想基于5th
,6th
和7th
列对行进行分组,并对每组中4th
列的值求和。
这是预期的输出:
预期输出:
chr5 112312630 112312650 31 chr5 112312630 112321662 DCP2 ENST00000543319.1
chr5 137676900 137676949 165 chr5 137676883 137676949 FAM53C ENST00000434981.2
chr5 139944400 139944450 169 chr5 139944064 139946344 SLC35A4 ENST00000323146.3
我正在尝试使用以下命令在python中执行此操作,但它实际上无法正常工作。你知道如何解决吗?
import pandas as pd
df = pd.read_csv('myfile.txt', sep='\t', header=None)
df = df.groupby(5, 6, 7, 8).sum()
答案 0 :(得分:1)
您只需要对cols进行分组:
df.groupby([5,6,7,8]).sum()
答案 1 :(得分:1)
您需要通过DataFrameGroupBy.agg
进行聚合,并使用具有聚合功能的列的字典,此处所有与cols
不同的列均通过last
或first
进行聚合,只有{{1} }列由4
聚合:
sum
cols = [5, 6, 7, 8]
d = dict.fromkeys(df.columns.difference(cols), 'last')
d[3] = 'sum'
print (d)
{0: 'last', 1: 'last', 2: 'last', 3: 'sum', 4: 'last'}
df = df.groupby([5, 6, 7, 8], as_index=False).agg(d).reindex(columns=df.columns)
print (df)
0 1 2 3 4 5 6 7 \
0 chr5 112312630 112312650 31 chr5 112312630 112321662 DCP2
1 chr5 137676900 137676949 165 chr5 137676883 137676949 FAM53C
2 chr5 139945450 139945500 169 chr5 139944064 139946344 SLC35A4
8
0 ENST00000543319.1
1 ENST00000434981.2
2 ENST00000323146.3
答案 2 :(得分:0)
尝试一下:
df.groupby(['column'])[['another column']].sum()
它按column
分组并相加another column
。
我使用[]
是为了使您了解可以按多个列进行分组,例如:
df.groupby(['column1', 'column2'])
答案 3 :(得分:0)
输入数据框:仅考虑前3行,
data = {'col1': ['chr5', 'chr5', 'chr5'],
'col2': [112312630,137676883,137676900],
'col3': [112312650,137676900,137676949],
'col4': [31, 123,42],
'col5': ['chr5', 'chr5', 'chr5'],
'col6': [112312630 ,137676883 ,137676883 ],
'col7': [112321662, 137676949, 137676949],
'col8': ['DCP2', 'FAM53C', 'FAM53C'],
'col9': ['ENST00000543319.1', 'ENST00000434981.2', 'ENST00000434981.2']
}
df = pd.DataFrame(data = data)
df
这样做,
cols = ['col5', 'col6', 'col7', 'col8']
col_sum = df.groupby(cols)['col4'].sum()
col_sum
输出:这是一个多级数据框。最后一列是您的输出,
col5 col6 col7 col8
chr5 112312630 112321662 DCP2 31
137676883 137676949 FAM53C 165