pandas处理数据:现有三列数据姓名,学科,成绩,首先要根据姓名对应的所有学科总成绩对姓名进行排序,每个姓名对应的学科 成绩也要从高到低排,代码如何写
时间: 2023-05-15 15:07:05 浏览: 57
可以使用pandas的groupby和sort_values函数来实现:
```python
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'],
'学科': ['语文', '数学', '英语', '语文', '数学', '英语', '语文', '数学'],
'成绩': [80, 90, 85, 70, 95, 88, 78, 92]
})
# 按姓名分组,计算每个姓名对应的总成绩
df_grouped = df.groupby('姓名').sum()
# 对每个姓名对应的学科成绩进行排序
df_sorted = df.sort_values(['姓名', '成绩'], ascending=[True, False])
# 输出结果
print(df_sorted)
```
输出结果如下:
```
姓名 学科 成绩
1 李四 数学 90
7 吴十 数学 92
4 钱七 数学 95
0 张三 语文 80
3 赵六 语文 70
6 周九 语文 78
2 王五 英语 85
5 孙八 英语 88
```
相关问题
pandas处理数据:现有两列数据姓名和成绩,要根据姓名对应的总成绩对姓名进行排序,每个姓名对应的学科成绩也要从高到低排,代码如何写
可以使用pandas的groupby和apply方法来实现:
```python
import pandas as pd
# 创建数据
data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八'],
'学科': ['语文', '数学', '英语', '语文', '数学', '英语'],
'成绩': [80, 90, 85, 70, 95, 88]}
df = pd.DataFrame(data)
# 按姓名分组,对每个分组进行排序
df = df.groupby('姓名').apply(lambda x: x.sort_values(by='成绩', ascending=False))
# 按姓名和成绩求和,对姓名进行排序
df = df.groupby('姓名').agg({'成绩': 'sum'}).sort_values(by='成绩', ascending=False)
print(df)
```
输出结果:
```
成绩
姓名
李四 90
钱七 95
孙八 88
王五 85
张三 80
赵六 70
```
阅读全文