[英]Find 2nd and 3rd highest value in Python
我有以下食品及其營養成分的數據框如下:
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
需要提取 Top Nutrient 的含量及其價值。 對於下面使用的代碼。
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
有沒有辦法顯示接下來的 2 種頂級營養素及其 Value.Expected Output 將是這樣的:
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
謝謝
這是最好的使用numpy.argsort
因為非常快。
首先按subset
過濾列 - []
並通過argsort
獲取 2. 和 3. 頂部的索引:
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
並添加 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.