保持基于groupby Series的表行

时间:2016-02-17 18:26:49

标签: pandas

尝试保持表中的行是'FEAMID'所特有的,其中'AREA'是最大的。

表:

       FEATUREID  COUNT      AREA    MIN    MAX  RANGE          MEAN  
0        -129226   1659   1493100  58441  60966   2525  59522.358650   
58940  940170467   1658   1492200  36659  45157   8498  40877.910133   
0        -129226  61540  55386000  56586  62291   5705  58709.266363   

我可以使用

获取每个'FEATUREID'的最大值'AREA'
table.groupby(['FEATUREID'])['AREA'].max()

FEATUREID
-129226        55386000
-129225        59676300
-129224       110445300
940170467     1492200

这是一个我认为对于索引具有FEATUREID的系列?我想选择本系列标识的表行,但我不确定这样做的最佳方法。

1 个答案:

答案 0 :(得分:0)

我认为您可以找到nlargest行,然后merge

df1 = df.groupby('FEATUREID')['AREA'].nlargest(1).reset_index(level=0)
                                                 .rename(columns={0:'AREA'})
print df1
       FEATUREID      AREA
0        -129226  55386000
58940  940170467   1492200

print pd.merge(df, df1, on=['FEATUREID','AREA'])
   FEATUREID  COUNT      AREA    MIN    MAX  RANGE          MEAN
0  940170467   1658   1492200  36659  45157   8498  40877.910133
1    -129226  61540  55386000  56586  62291   5705  58709.266363

如果您需要index,则会更复杂:

df1 = df.groupby('FEATUREID')['AREA'].nlargest(1).reset_index()
                                     .rename(columns={0:'AREA', 'level_1': 'index'})
print df1
   FEATUREID  index      AREA
0    -129226      0  55386000
1  940170467  58940   1492200

df = pd.merge(df.reset_index(), df1, on=['FEATUREID','AREA', 'index']).set_index('index')
df.index.name = None
print df
       FEATUREID  COUNT      AREA    MIN    MAX  RANGE          MEAN
58940  940170467   1658   1492200  36659  45157   8498  40877.910133
0        -129226  61540  55386000  56586  62291   5705  58709.266363