查找Python中第二和第三高的值
我有以下食品及其营养成分的数据框架:查找Python中第二和第三高的值,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有以下食品及其营养成分的数据框架: import pandas as pd import os os.chdir('D:\\userdata\\adbharga\\Desktop\\AVA\\RTestCode\\Python') data=pd.read_csv("nutrient.csv") data.head() 出[30]: Name Calories Fat Carb Fiber Protein 0 Chonga Bagel 300 5
import pandas as pd
import os
os.chdir('D:\\userdata\\adbharga\\Desktop\\AVA\\RTestCode\\Python')
data=pd.read_csv("nutrient.csv")
data.head()
出[30]:
Name Calories Fat Carb Fiber Protein
0 Chonga Bagel 300 5 50 3 12
1 8-Grain Roll 380 6 70 7 10
2 Almond Croissant 410 22 45 3 10
3 Apple Fritter 460 23 56 2 7
4 Banana Nut Bread 420 22 52 2 6
需要提取顶级营养成分及其价值。对于下面使用的代码
data['Top Nutrient'] = data[['Calories','Fat','Carb','Fiber','Protein']].idxmax(axis=1)
data['Amount']= data[['Calories','Fat','Carb','Fiber','Protein']].max(axis=1)
data.head()
出[33]:
Name Calories Fat Carb Fiber Protein Top Nutrient Amount
0 Chonga Bagel 300 5 50 3 12 Calories 300
1 8-Grain Roll 380 6 70 7 10 Calories 380
2 Almond Croissant 410 22 45 3 10 Calories 410
3 Apple Fritter 460 23 56 2 7 Calories 460
4 Banana Nut Bread 420 22 52 2 6 Calories 420
是否有办法显示下两种顶级营养素及其价值。预期产量如下:
Name NextTop2 NextTop2Amount
Chonga Bagel Carb|Protein 50|12
8-Grain Roll Carb|Protein 70|10
Almond Croissant Carb|Fat 45|22
Apple Fritter Carb|Fat 56|23
Banana Nut Bread Carb|Fat 52|22
谢谢这是最好的用法,因为速度非常快
首先按子集
-[]
筛选列,并按argsort
获取索引,以获取2的索引。三,。顶部:
cols = ['Calories','Fat','Carb','Fiber','Protein']
arr = data[cols].values.argsort(axis=1)[:, [-2, -3]]
a = np.array(cols)[arr]
print (a)
[['Carb' 'Protein']
['Carb' 'Protein']
['Carb' 'Fat']
['Carb' 'Fat']
['Carb' 'Fat']]
还可以通过索引选择值:
b = data[cols].values[np.arange(len(arr))[:,None], arr]
print (b)
[[50 12]
[70 10]
[45 22]
[56 23]
[52 22]]
最后为一列创建DataFrame
s并添加join by
:
data['Top Nutrient'] = data[cols].idxmax(axis=1)
data['Amount']= data[cols].max(axis=1)
data['NextTop2'] = pd.DataFrame(a).apply('|'.join, 1)
data['NextTop2Amount'] = pd.DataFrame(b).astype(str).apply('|'.join, 1)
谢谢,效果很好。事实上,只要稍加调整,就可以根据用户需求生成更多的结果(如第一大和第三大等)
print (data)
Name Calories Fat Carb Fiber Protein Top Nutrient Amount \
0 Chonga Bagel 300 5 50 3 12 Calories 300
1 8-Grain Roll 380 6 70 7 10 Calories 380
2 Almond Croissant 410 22 45 3 10 Calories 410
3 Apple Fritter 460 23 56 2 7 Calories 460
4 Banana Nut Bread 420 22 52 2 6 Calories 420
NextTop2 NextTop2Amount
0 Carb|Protein 50|12
1 Carb|Protein 70|10
2 Carb|Fat 45|22
3 Carb|Fat 56|23
4 Carb|Fat 52|22