首页 > 解决方案 > 在pandas df中对具有相同名称的行中的所有字段求和的方式?

问题描述

我正在用头撞墙:我想为“融合”列中具有相同值的所有行逐行添加所有值。这是一个虚拟示例:

import pandas as pd

rows_l = [['AFF1_KMT2A', 3.0, 1.0, 1.0, 1.0, 4, 6.0],
 ['AFF1_KMT2A', 3.0, 2.0, 1.0, 0.0, 3, 6.0],
 ['TCF3_PBX1', 3.0, 1.0, 1.0, 0.0, 3, 5.0],
 ['TCF3_PBX1', 0.0, 0.0, 0.0, 1.0, 1, 1.0],
 ['ABL1_BCR', 1.0, 1.0, 1.0, 2.0, 4, 5.0]]
col_l = ['fusion', 'FusionCatcher', 'Manta', 'STARfusion', 'TopHat','tool_count', 'tot']

my_df = pd.DataFrame(rows_l, columns=col_l)

给我这个 my_df:

融合 融合捕手 蝠鲼 星融合 顶帽 工具计数
0 ABL1_BCR 1.0 1.0 1.0 2.0 4 5.0
1 AFF1_KMT2A 3.0 2.0 1.0 0.0 3 6.0
2 TCF3_PBX1 3.0 1.0 1.0 0.0 3 5.0
3 AFF1_KMT2A 3.0 1.0 1.0 1.0 4 6.0
4 TCF3_PBX1 0.0 0.0 0.0 1.0 1 1.0

当然,在我的真实文件中,相同的行并不总是相隔一行,而是到处都是......

我的输出应该是这样的:

融合 融合捕手 蝠鲼 星融合 顶帽 工具计数
0 AFF1_KMT2A 6.0 3.0 2.0 1.0 7 12.0
1 TCF3_PBX1 3.0 1.0 1.0 1.0 4 6.0
2 ABL1_BCR 1.0 1.0 1.0 2.0 4 5.0

到目前为止,我只发现df['whatever_you_want_to_sum'].groupby(df['col_names_if_same_wil_be_bundled'])了但这似乎只适用于对我没有多大帮助的 2 列。

有什么特别python pandas的方法可以做到这一点,还是我应该继续写我for-loops的,直到打印看起来正确?

标签: pythonpandasdataframe

解决方案


您可以尝试使用数据透视表吗?

pd.pivot_table(my_df, index="fusion", values=col_l, aggfunc=np.sum)

你也需要import numpy as np事先。您会得到一个数据透视表,如下所示:在此处输入图像描述


推荐阅读