#该题目来源于力扣:
题目要求:
DataFrame report
+-------------+--------+
| Column Name | Type |
+-------------+--------+
| product | object |
| quarter_1 | int |
| quarter_2 | int |
| quarter_3 | int |
| quarter_4 | int |
+-------------+--------+
编写一个解决方案,将数据 重塑 成每一行表示特定季度产品销售数据的形式。
结果格式如下例所示:
示例 1:
输入:
+-------------+-----------+-----------+-----------+-----------+
| product | quarter_1 | quarter_2 | quarter_3 | quarter_4 |
+-------------+-----------+-----------+-----------+-----------+
| Umbrella | 417 | 224 | 379 | 611 |
| SleepingBag | 800 | 936 | 93 | 875 |
+-------------+-----------+-----------+-----------+-----------+
输出:
+-------------+-----------+-------+
| product | quarter | sales |
+-------------+-----------+-------+
| Umbrella | quarter_1 | 417 |
| SleepingBag | quarter_1 | 800 |
| Umbrella | quarter_2 | 224 |
| SleepingBag | quarter_2 | 936 |
| Umbrella | quarter_3 | 379 |
| SleepingBag | quarter_3 | 93 |
| Umbrella | quarter_4 | 611 |
| SleepingBag | quarter_4 | 875 |
+-------------+-----------+-------+
解释:
DataFrame 已从宽格式重塑为长格式。每一行表示一个季度内产品的销售情况
思路流程:
- 该题目要求我们将横向的数据转化为纵向的数据。
- 转换后的数据要求将product列作为缩影保存
- 转换后的数据要求将quarter_1等列名作为被储存的列名,储存它们的新列名叫quarter。
- 转换后的数据要求将原数据的数值作为列内容储存到新列中,新列的名字叫sales
由此可见我们需要用到melt函数,具体参数如下:
df
: 输入的DataFrame对象。id_vars
: 保留不变的行索引或列名,即想要保留在结果中的固定特征列。var_name
: 新添加的列名,用于存储原来的列名。value_name
: 新添加的列名,用于存储原来列的内容。
对应参数按要求进行输入即可。
代码实现:
import pandas as pd
def meltTable(report: pd.DataFrame) -> pd.DataFrame:
data=report.melt(id_vars='product',var_name='quarter',value_name='sales')
return data