如何在Pandas DataFrame中获取最值及按姓名分组的班级数据
Pandas DataFrame 操作问题解答
原始数据定义
import pandas as pd data = [(1,"tom", 23), (1,"nick", 12), (1,"jim",13), (2,"tom", 44), (2,"nick", 56), (2,"jim",77), (3, "tom", 88), (3, "nick", 10), (3, "jim", 13), ] df = pd.DataFrame(data, columns=['class', 'Name','number'])
对应的DataFrame输出:
class Name number 0 1 tom 23 1 1 nick 12 2 1 jim 13 3 2 tom 44 4 2 nick 56 5 2 jim 77 6 3 tom 88 7 3 nick 10 8 3 jim 13
问题1:获取DataFrame的最大值和最小值
全局列级最值:直接调用
max()和min()方法,会返回每一列的最值# 各列最大值 column_max = df.max() # 各列最小值 column_min = df.min()输出示例:
class 3 Name tom number 88 dtype: object特定列最值:指定列名后调用方法,仅返回目标列的最值
# 获取number列的最大值 num_max = df['number'].max() # 获取number列的最小值 num_min = df['number'].min()
问题2:按要求提取并展示数据
需求:先获取class=1分组中各Name对应的number值,再按相同Name、不同class的顺序展示数据,输出指定格式。
实现代码:
# 按Name分组,遍历每个分组的数据 for name, group in df.groupby('Name'): # 按class升序排序,保证输出顺序正确 sorted_group = group.sort_values('class') # 逐行输出指定格式内容 for _, row in sorted_group.iterrows(): print(f"[name ={row['Name']}, class={row['class']}, number ={row['number']}]")
执行后输出:
[name =jim, class=1, number =13] [name =jim, class=2, number =77] [name =jim, class=3, number =13] [name =nick, class=1, number =12] [name =nick, class=2, number =56] [name =nick, class=3, number =10] [name =tom, class=1, number =23] [name =tom, class=2, number =44] [name =tom, class=3, number =88]
如果需要仅展示class=1中存在的Name(当前示例中所有Name都满足),可以先筛选再处理:
# 提取class=1中的所有Name target_names = df[df['class'] == 1]['Name'].unique() # 过滤出目标Name的数据并分组展示 filtered_df = df[df['Name'].isin(target_names)] for name, group in filtered_df.groupby('Name'): sorted_group = group.sort_values('class') for _, row in sorted_group.iterrows(): print(f"[name ={row['Name']}, class={row['class']}, number ={row['number']}]")
内容的提问来源于stack exchange,提问作者Phan Steel
相关产品推荐
相关产品推荐

