- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表
Department
:+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | revenue | int | | month | varchar | +---------------+---------+ 在 SQL 中,(id, month) 是表的联合主键。 这个表格有关于每个部门每月收入的信息。 月份(month)可以取下列值 ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]。重新格式化表格,使得 每个月 都有一个部门 id 列和一个收入列。
以 任意顺序 返回结果表。
结果格式如以下示例所示。
示例 1:
输入: Department table: +------+---------+-------+ | id | revenue | month | +------+---------+-------+ | 1 | 8000 | Jan | | 2 | 9000 | Jan | | 3 | 10000 | Feb | | 1 | 7000 | Feb | | 1 | 6000 | Mar | +------+---------+-------+ 输出: +------+-------------+-------------+-------------+-----+-------------+ | id | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue | +------+-------------+-------------+-------------+-----+-------------+ | 1 | 8000 | 7000 | 6000 | ... | null | | 2 | 9000 | null | null | ... | null | | 3 | null | 10000 | null | ... | null | +------+-------------+-------------+-------------+-----+-------------+ 解释:四月到十二月的收入为空。 请注意,结果表共有 13 列(1 列用于部门 ID,其余 12 列用于各个月份)。
三,建表语句
import pandas as pd
data = [[1, 8000, 'Jan'], [2, 9000, 'Jan'], [3, 10000, 'Feb'], [1, 7000, 'Feb'], [1, 6000, 'Mar']]
department = pd.DataFrame(data, columns=['id', 'revenue', 'month']).astype({'id':'Int64', 'revenue':'Int64', 'month':'object'})
四,分析
思路
pandas
第一步,使用透视表的方法,指定要分组的列,指定要把行转为列的 列内容,指定要计算的列
第二步:重置索引,让索引等于我们指定的列
第三步:重置列名
第四步:重置索引
第五步:输出
五,Pandas解答
import pandas as pd
def reformat_table(department: pd.DataFrame) -> pd.DataFrame:
#透视表 以id为索引 也就是以id分组
#列的值转为列名 是针对month
#值是revenue
df1 = department.pivot(index='id',columns='month',values='revenue')
month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
months = ['Jan_Revenue', 'Feb_Revenue', 'Mar_Revenue', 'Apr_Revenue', 'May_Revenue', 'Jun_Revenue', 'Jul_Revenue', 'Aug_Revenue', 'Sep_Revenue', 'Oct_Revenue', 'Nov_Revenue', 'Dec_Revenue']
df1 = df1.reindex(columns=month)
#这行代码对df1的列进行重新索引。如果df1的列在之前的操作中顺序被打乱或者缺少某些月份列,
# 这一步会按照month列表中的顺序重新排列列。如果有不在month列表中的列名,这些列将会被移除;
# 如果month列表中有不在df1中的列名,将会添加这些列名对应的全为NaN的列。
df1.columns=months
df1 = df1.reset_index()
return df1
reformat_table(department)
六,验证
七,知识点总结
- Pandas中透视表的运用
- Pandas中重置索引的运用
- Pandas中重置列名的运用
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用