题目
给定一个df,包含ABCDE多个列。请编写一个 Python 程序,将列 ‘D’ 和 ‘E’ 转换为长格式,并使用 ‘A’、‘B’ 和 ‘C’ 作为标识符。
换句话说,将数据中的D、E两列转换为行,使数据从宽变长。
示例:
输入:
df = pd.DataFrame({
'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
'B': ['one', 'one', 'two', 'two', 'one', 'one'],
'C': ['x', 'y', 'x', 'y', 'x', 'y'],
'D': [1, 2, 3, 4, 5, 6],
'E': [10, 20, 30, 40, 50, 60]
})
输出:
A B C variable value
0 foo one x D 1
1 foo one y D 2
2 foo two x D 3
3 bar two y D 4
4 bar one x D 5
5 bar one y D 6
6 foo one x E 10
7 foo one y E 20
8 foo two x E 30
9 bar two y E 40
10 bar one x E 50
11 bar one y E 60
答案
解题思路
要将 DataFrame 从宽格式转换为长格式,我们可以使用 Pandas 提供的 melt()
函数。该函数通过将指定的列从宽格式转换为长格式,使数据更适合进一步处理或可视化。
答案代码
import pandas as pd
# 创建示例 DataFrame
df = pd.DataFrame({
'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
'B': ['one', 'one', 'two', 'two', 'one', 'one'],
'C': ['x', 'y', 'x', 'y', 'x', 'y'],
'D': [1, 2, 3, 4, 5, 6],
'E': [10, 20, 30, 40, 50, 60]
})
# 使用 melt 函数将 DataFrame 从宽格式转换为长格式
df_melted = df.melt(id_vars=['A', 'B', 'C'], value_vars=['D', 'E'])
print(df_melted)
代码解释
- 使用
df.melt(id_vars=['A', 'B', 'C'], value_vars=['D', 'E'])
将列 D 和 E 从宽格式转换为长格式。 - 列 ‘D’ 和 ‘E’ 已被旋转,它们的值被列在 ‘value’ 列中。对应的列名(‘D’ 或 ‘E’)被列在 ‘variable’ 列中。
更多详细答案可查看🔍 原文链接 或 关注公众号查阅。