2017-08-04 76 views
-1

编辑:请用现有代码更新此帖子。我使用ArcPy中的要素类转换为numpy的阵列,然后大熊猫数据帧:熊猫群体2列,选择第3列的最大值

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 

正如标题所暗示的,我试图按FID_preproc和使用Shape_Area的最大NAME。

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 

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

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

你的问题是什么?你写的代码会给你你的结果, –

+0

当我将maxarea datafram保存为csv时,它会生成与上面的“Input”样本相同的结果,而不是“期望的结果”。 – user2309282

+0

does'maxarea = itsct_df.loc [itsct_df.groupby('FID_preproc',as_index = False)['Shape_Area'] .idxmax()]'然后呢? – EdChum

回答

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这将返回的索引标签最大值,然后你可以通过这些来的原稿DF索引

+0

Ed,我得到错误“AttributeError:'DataFrame'对象没有属性'loc'” – user2309282

+0

请发布产生此错误的原始数据和代码 – EdChum

+0

Ed - 示例数据是什么实际上在源(可能是一个CSV例如)填充数据帧。我复制并粘贴您的示例解决方案,并生成该错误。 – user2309282

1

尝试:

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

不,这是错的,这返回原来的df – EdChum

+0

谢谢Kanav。但是,这与输入示例相同,而不是所需结果。 – user2309282