首页 > 解决方案 > 我正确使用 groupby.sum() 吗?

问题描述

我有以下代码,并且 new_df["SUM"] 行中存在问题:

import pandas as pd 

df = pd.read_excel(r"D:\Tesina\Proteoma Humano\Tablas\uno - copia.xlsx")

#df =  pd.DataFrame({'ID': ['C9JLR9','O95391', 'P05114',"P14866"], 'SEQ': ['1..100,182..250,329..417,490..583', '1..100,206..254,493..586', '1..100', "1..100,284..378" ]})
df2 = pd.DataFrame

df["SEQ"] = df["SEQ"].replace("\.\."," ", regex =True)
new_df = df.assign(SEQ=df.SEQ.str.split(',')).explode('SEQ')
for index, row in df.iterrows():
    new_df['delta'] = new_df['SEQ'].map(lambda x: (int(x.split()[1])+1)-int(x.split()[0]) if x.split()[0] != '1' else (int(x.split()[1])+1))
new_df["SUM"] = new_df.groupby(["ID"]).sum().reset_index(drop=True) #Here's the error, even though I can't see where
df2 = new_df.groupby(["ID","SUM"], sort=False)["SEQ"].apply((lambda x: ','.join(x.astype(str)))).reset_index(name="SEQ")

为了给出一些上下文,它的作用如下:获取具有相同 ID 的每一行,用“,”分隔数字,对这些数字进行一些数学运算(这就是“delta”(我知道它不是一个 delta) 行涉及),最后总结了每个 ID 的所有“delta”,按它们的原始 ID 将它们全部分组,所以我保持相同的行数。

而且,当我使用数据样本(开头评论的那个)时,它工作得很好,给了我我希望的输出:

       ID  SUM                            SEQ
0  C9JLR9  353  1 100,182 250,329 417,490 583
1  O95391  244          1 100,206 254,493 586
2  P05114  101                          1 100
3  P14866  196                  1 100,284 378

但是,当我在我的 Excel 文件(有 10471 行)上应用它时, groupby.sum() 行无法正常工作(我已经检查了其他所有内容,我知道错误在该行内) . 这是我收到的输出:

           ID  SUM                            SEQ
0      C9JLR9   39  1 100,182 250,329 417,490 583
1      O95391   20          1 100,206 254,493 586
2      P05114   33                          1 100
4      P98177   21                  1 100,176 246

您可以清楚地看到 SUM 值不同(并且根本不正确)。我也无法弄清楚这些数字来自哪里。这真的很奇怪。

标签: pythonpandasdataframe

解决方案


如果有人感兴趣,评论中提供了解决方案:我不得不用以下内容更改该行:

new_df["SUM"] = new_df.groupby("ID")["delta"].transform("sum")


推荐阅读