如何使groupby对象的处理更高效?

2024-05-23 15:31:34 发布

您现在位置:Python中文网/ 问答频道 /正文

“”“ 我有一个百万行的数据框,我在上面做了.groupby()

  1. 我想检索包含每个id和组织组合的最大值的行
  2. 此外,我需要生成另一个df,其中包含每个id和组织组合的平均值。 虽然我使用的是功能强大的Linux服务器,但进程运行了24小时以上。因此,我正在寻找一种更有效的策略。我花了数小时在stackoverflow上,但我没有将解决方案应用到我的特定问题上。 提前谢谢你帮了我的忙

“”“

df = pd.DataFrame({'id': ['g1','g1','g1','g1','g2','g2','g2','g2','g2','g2'],\
                  'Trans':['g1.1','g1.2','g1.3','g1.4','g2.1','g2.2','g2.3','g2.2','g2.1','g2.1'],\
                  'Tissue': ['Lf','Lf','Lf','pc','Pol','Pol','Pol','Ant','Ant','m2'],\
                  'val': [0.0948,1.5749,1.8904,0.8673,2.1089,2.5058,4.5722,0.7626,3.1381,2.723]})
print('df')

df_highest = pd.DataFrame(columns=df.columns)#brand new df that will contain the rows of interest
for grpID,data in df.groupby(['id','Tissue']):
    highest = data.nlargest(1,'val')
    df_highest.append(highest)

df_highest.to_csv('out.txt',sep='\t',index=False)

Tags: columnsiddataframedfvalpd小时groupby
1条回答
网友
1楼 · 发布于 2024-05-23 15:31:34

如果您试图获得每个id和组织组合的最大值,请尝试以下代码

df_highest = df.loc[df.groupby(['id','Tissue'])['val'].idxmax()]

这将为您提供id和组织组合的平均值

df_mean = df.groupby(['id','Tissue']).agg({'val':np.mean})

相关问题 更多 >