Pandas groupby 2列,选择第3列的最大值

时间:2017-08-04 13:22:18

标签: pandas

编辑:请求使用现有代码更新此帖子。我正在使用arcpy将要素类转换为numpy数组,然后转换为pandas数据帧:

MainActivity

正如标题所示,我正在尝试使用最大的Shape_Area按FID_preproc和NAME进行分组。

itsct_nparr = arcpy.da.FeatureClassToNumPyArray(prItsct, ['FID_preproc','PLANREG_NAME','Shape_Area'])
#create a pandas DataFrame objects from the NumPy arrays
itsct_df = DataFrame(itsct_nparr, columns=['FID_preproc','PLANREG_NAME','Shape_Area'])
maxarea = itsct_df.groupby(['FID_preproc','PLANREG_NAME'], as_index=False).max()
maxarea.to_csv(csvout)
del itsct_nparr

这让我接近我想要的但是产生与上面第一个样本集相同的结果。

Input:   
FID_preproc NAME Shape_Area 
1340         A   25952.35775 
1341         A   118099.5219 
1341         B   305220.1244 
1342         A   12053.13585 


Desired Result:   
FID_preproc NAME Shape_Area 
1340         A   25952.35775 
1341         B   305220.1244 
1342         A   12053.13585 

2 个答案:

答案 0 :(得分:2)

在我看来,你实际上只想要每个FID_preproc的最大形状区域:

In[34]:
maxarea = df.loc[df.groupby('FID_preproc', as_index=False)['Shape_Area'].idxmax()]
maxarea

Out[34]: 
   FID_preproc NAME    Shape_Area
0         1340    A   25952.35775
2         1341    B  305220.12440
3         1342    A   12053.13585

如果您在第一列上groupby然后调用idxmax这将返回最大值的索引标签,则可以将这些标签传递给orig df索引

答案 1 :(得分:1)

尝试:

maxarea = itsct_df.groupby(['FID_preproc','PLANREG_NAME'], as_index=False).max()