我有以下代码,在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的每一行,用",“分隔数字,用这些数字做一些数学运算(这就是”增量“(我知道它不是增量)行涉及的地方),最后对每个ID的所有”增量“求和,按照它们的原始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值不同(并且根本不正确)。我也不能弄清楚这些数字是从哪里来的。真的很奇怪。
发布于 2020-10-31 00:04:36
如果有人感兴趣,在评论中提供了解决方案:我必须用以下代码更改行:
new_df["SUM"] = new_df.groupby("ID")["delta"].transform("sum")https://stackoverflow.com/questions/64611576
复制相似问题