透视表(pivot table)中的某类型数据进行降序排列
要对透视表(pivot table)中的 "action"
类型数据进行降序排列,可以使用 Pandas 的 sort_values()
方法。以下是具体方法和解释:
1. 原始透视表结构
假设你的透视表是通过以下代码生成的:
pivot_table = pd.pivot_table(
clear_combined_data,
index=["genres"],
columns="person_id",
values="imdb_score",
aggfunc=np.sum
)
透视表可能如下(示例):
person_id 101 102 103
genres
Action 7.5 8.0 NaN
Comedy 6.5 NaN 7.0
Drama NaN 9.0 6.0
2. 提取 "action"
类型数据
action_data = pivot_table.loc["Action"] # 提取 "Action" 行
输出:
person_id
101 7.5
102 8.0
103 NaN
Name: Action, dtype: float64
3. 对 action_data
降序排列
由于 action_data
是一个 Series(一维数据),直接使用 sort_values()
:
action_sorted = action_data.sort_values(ascending=False)
参数说明
ascending=False
:降序排列(默认是True
升序)。- 如果数据中有
NaN
,默认会排在最后。
输出结果
person_id
102 8.0
101 7.5
103 NaN
Name: Action, dtype: float64
4. 如果你想按列(演员ID)对透视表排序
如果目标是 对所有电影类型按某列(如演员ID=101)降序排列,可以这样操作:
pivot_sorted = pivot_table.sort_values(by=101, ascending=False)
输出:
person_id 101 102 103
genres
Action 7.5 8.0 NaN
Comedy 6.5 NaN 7.0
Drama NaN 9.0 6.0
(因为 Action
的101列值是7.5,高于 Comedy
的6.5)
5. 完整代码示例
import pandas as pd
import numpy as np
# 假设原始数据
data = {
"genres": ["Action", "Action", "Comedy", "Comedy", "Drama", "Drama"],
"person_id": [101, 102, 101, 103, 102, 103],
"imdb_score": [7.5, 8.0, 6.5, 7.0, 9.0, 6.0]
}
clear_combined_data = pd.DataFrame(data)
# 生成透视表
pivot_table = pd.pivot_table(
clear_combined_data,
index=["genres"],
columns="person_id",
values="imdb_score",
aggfunc=np.sum
)
# 1. 提取 "Action" 类型并降序排列
action_sorted = pivot_table.loc["Action"].sort_values(ascending=False)
print("Action类型降序排列:\n", action_sorted)
# 2. 对整个透视表按演员101的评分降序排列
pivot_sorted = pivot_table.sort_values(by=101, ascending=False)
print("\n透视表按演员101降序排列:\n", pivot_sorted)
6. 输出结果
Action类型降序排列:
person_id
102 8.0
101 7.5
103 NaN
Name: Action, dtype: float64
透视表按演员101降序排列:
person_id 101 102 103
genres
Action 7.5 8.0 NaN
Comedy 6.5 NaN 7.0
Drama NaN 9.0 6.0
总结
- 对单行(如
"Action"
)排序:
pivot_table.loc["Action"].sort_values(ascending=False)
- 对整个透视表按某列排序:
pivot_table.sort_values(by=列名, ascending=False)
- 处理
NaN
:默认排在最后,可通过na_position="first"
调整。