如何使按对象分组的Pandas处理更高效



"quot"我有一个百万行的数据帧,我在上做了.groupby()

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

"quot;

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)

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

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

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

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

最新更新