请求将指定Pandas DataFrame按示例要求进行格式转换
实现思路与代码
输入数据结构
先明确输入的DataFrame结构:
| ID | A | B | C | D | E |
|---|---|---|---|---|---|
| 500 | 3 | 3 | 2 | ||
| 200 | 3 | 1 | 2 | ||
| 300 | 1 | 2 |
目标输出结构
需要转换为长格式,仅保留非空值的行:
| ID | Column | Value |
|---|---|---|
| 500 | A | 3 |
| 500 | B | 3 |
| 500 | C | 2 |
| 200 | A | 3 |
| 200 | B | 1 |
| 200 | D | 2 |
| 300 | D | 1 |
| 300 | E | 2 |
实现步骤
- 宽表转长表:用Pandas的
melt函数,将ID设为标识变量,其余列作为值变量,生成包含ID、列名、对应值的长表。 - 过滤空值:剔除值为空字符串的行。
- 整理格式:重命名列名并重置索引,让结果更整洁。
代码实现
import pandas as pd # 输入数据 data = { 'ID': [500, 200, 300], 'A': [3, 3, ''], 'B': [3, 1, ''], 'C': [2, '' ,''], 'D': ['', 2, 1], 'E': ['', '',2 ], } df = pd.DataFrame(data) # 转换操作 result = df.melt(id_vars='ID', var_name='Column', value_name='Value') # 过滤空值行 result = result[result['Value'] != ''].reset_index(drop=True) print(result)
执行后输出:
ID Column Value 0 500 A 3 1 200 A 3 2 500 B 3 3 200 B 1 4 500 C 2 5 200 D 2 6 300 D 1 7 300 E 2
内容的提问来源于stack exchange,提问作者Romeo Gherasim
相关产品推荐
相关产品推荐

