我有pandas
数据,其结构由info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 7058 entries, 0 to 7057
Data columns (total 16 columns):
ID 7058 non-null int64
Description 7058 non-null object
Calories 7057 non-null float64
Protein 7057 non-null float64
TotalFat 7057 non-null float64
Carbohydrate 7057 non-null float64
Sodium 6974 non-null float64
SaturatedFat 6757 non-null float64
Cholesterol 6770 non-null float64
Sugar 5148 non-null float64
Calcium 6922 non-null float64
Iron 6935 non-null float64
Potassium 6649 non-null float64
VitaminC 6726 non-null float64
VitaminE 4338 non-null float64
VitaminD 4224 non-null float64
dtypes: float64(14), int64(1), object(1)
我希望生成一个表格,其中包含与
行数字列的每个最大值对应的描述和值Description Value Category
SALT, TABLE 38758.00 Sodium
FAT,BEEF TALLOW 100.00 TotalFat
FRUCTOSE,DRY,PDR 100.00 Carbohydrate
...
我可以通过
之类的东西获得一些零碎的东西>>> usda.Description[usda[['Protein','TotalFat','Sodium','Carbohydrate']].idxmax()]
4660 SOY PROT ISOLATE,K TYPE,CRUDE PROT BASIS
288 FAT,BEEF TALLOW
264 SALT,TABLE
6959 SWEETENERS,TABLETOP,FRUCTOSE,DRY,PDR
Name: Description, dtype: object
和
>>> usda[['Protein','TotalFat','Sodium','Carbohydrate']].max()
Protein 88.32
TotalFat 100.00
Sodium 38758.00
Carbohydrate 100.00
dtype: float64
但这就是我可以管理的事情。
是否有一种简洁的方法可以找到数据集中每个数字列的最大值,并生成一个包含该值的表格,相应的“描述”&#39;以及找到最大值的列的名称?
答案 0 :(得分:0)
从:
开始 Description Sodium TotalFat Carbohydrate
0 ABC 1 10 4
1 DEF 2 9 5
2 GHI 3 8 0
[3 rows x 4 columns]
你可以融化类别:
>>> mlt = pd.melt(df, id_vars='Description',
... value_vars=['Sodium', 'TotalFat', 'Carbohydrate'],
... value_name='value', var_name='category')
>>> mlt
Description category value
0 ABC Sodium 1
1 DEF Sodium 2
2 GHI Sodium 3
3 ABC TotalFat 10
4 DEF TotalFat 9
5 GHI TotalFat 8
6 ABC Carbohydrate 4
7 DEF Carbohydrate 5
8 GHI Carbohydrate 0
[9 rows x 3 columns]
然后按类别分组:
>>> mdf = mlt.groupby('category').apply(lambda obj: obj.loc[obj.value.idxmax()])
>>> mdf.reset_index(drop=True)
Description category value
0 DEF Carbohydrate 5
1 GHI Sodium 3
2 ABC TotalFat 10
[3 rows x 3 columns]