查找列的最大值,并在另一列中返回值

时间:2015-10-12 16:47:42

标签: python pandas

我有一个这样的数据框:

   Allotment  NDII Percent  NDII Value  NDVI Percent  NDVI Value
0    Arnston        0.0550   -0.199448           NaN         NaN
1    Arnston        0.0000   -0.198036           NaN         NaN
2    Arnston        0.0000   -0.196623           NaN         NaN
3    Arnston        0.0000   -0.195211           NaN         NaN
4    Arnston        0.0000   -0.193799           NaN         NaN
5    Arnston        0.0275   -0.192386           NaN         NaN
6    Arnston        0.0550   -0.190974           NaN         NaN
7    Arnston        0.0000   -0.189561           NaN         NaN
8    Arnston        0.0275   -0.188149           NaN         NaN
9    Arnston        0.1926   -0.186737           NaN         NaN
10      Anex        0.0275   -0.185324           NaN         NaN
11      Anex        0.0275   -0.183912           NaN         NaN
12      Anex        0.1376   -0.182499           NaN         NaN
13      Anex        0.0000   -0.181087           NaN         NaN
14      Anex        0.1100   -0.179675           NaN         NaN
15      Anex        0.0550   -0.178262           NaN         NaN
16      Anex        0.0000   -0.176850           NaN         NaN
17      Anex        0.0275   -0.175437           NaN         NaN
18      Anex        0.1100   -0.174025           NaN         NaN
0    Arnston           NaN         NaN        5.0338    0.000000
1    Arnston           NaN         NaN        1.0000    0.002235
2    Arnston           NaN         NaN        0.0200    0.004469
3    Arnston           NaN         NaN        0.1000    0.006704
4    Arnston           NaN         NaN        2.0000    0.008939
5    Arnston           NaN         NaN        1.0000    0.011173
6    Arnston           NaN         NaN        2.0000    0.013408
7    Arnston           NaN         NaN        0.0000    0.015643
8    Arnston           NaN         NaN        0.0000    0.017877
9    Arnston           NaN         NaN        0.0000    0.020112
10   Arnston           NaN         NaN        0.0000    0.022346
11      Anex           NaN         NaN        1.0000    0.024581
12      Anex           NaN         NaN        3.0000    0.026816
13      Anex           NaN         NaN        5.0000    0.029050
14      Anex           NaN         NaN        0.0000    0.031285
15      Anex           NaN         NaN        0.0000    0.033520
16      Anex           NaN         NaN        0.0000    0.035754
17      Anex           NaN         NaN        0.0000    0.037989
18      Anex           NaN         NaN        0.0000    0.040224
19      Anex           NaN         NaN        0.0000    0.042458
20      Anex           NaN         NaN        0.0000    0.044693
21      Anex           NaN         NaN        0.0000    0.046928
22      Anex           NaN         NaN        0.0000    0.049162
23      Anex           NaN         NaN        0.0000    0.051397
24      Anex           NaN         NaN        0.0000    0.053631
25      Anex           NaN         NaN        0.0000    0.055866
26      Anex           NaN         NaN        0.0000    0.058101

我想找到每个NDII Value的最高NDII Percent及其关联的Allotment,以及每个{{NDVI Value及其关联的NDVI Percent Allotment 1}}。所以我知道我需要先在Allotment上使用groupby,但这就是我遇到的问题。

我想要的输出是:

Allotment    NDII Percent NDII Value   NDVI Percent   NDVI Value
Arnston      0.1926       -0.186737    0.0000         0.022346
Anex         0.1100       -0.174025    0.0000         0.058101

1 个答案:

答案 0 :(得分:1)

也许这是一种更直接,更优雅的方式,但是,让df成为您的原始数据框:

df1 = df.iloc[df.groupby(['Allotment'])['NDII Value'].apply(lambda x: x.idxmax())]
df2 = df.iloc[df.groupby(['Allotment'])['NDVI Value'].apply(lambda x: x.idxmax())]

然后我只选择我需要的列:

d1 = df1[['Allotment','NDII Value','NDII Percent']]
d2 = df2[['Allotment','NDVI Value','NDVI Percent']]

并合并:

d = d1.merge(d2,how='outer')

返回:

  Allotment  NDII Value  NDII Percent  NDVI Value  NDVI Percent
0      Anex   -0.174025        0.1100    0.058101             0
1   Arnston   -0.186737        0.1926    0.022346             0

希望有所帮助。