我有一个这样的数据框:
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
。所以我知道我首先需要在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
最佳答案
也许有一种更直接,更优雅的方法来做到这一点,但是让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
希望能有所帮助。
关于python - 查找列的最大值,然后在另一列中返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33086270/