如何重塑 pandas DataFrame,将列名转换为值


如果你想将 Pandas DataFrame 中的列名转换为值,并将其作为数据的一部分,你可以使用 melt 函数或者 stack 方法来重新塑造数据。下面我会介绍两种方法:

方法 1: 使用 melt 函数

melt 函数可以将 DataFrame 的列转为行,这样列名会变成一个新的列中的值。

示例代码:

import pandas as pd

# 创建一个示例 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
})

# 使用 melt 将列名转为行
melted_df = pd.melt(df, var_name='Variable', value_name='Value')

print(melted_df)

输出:

Variable  Value
0        A      1
1        A      2
2        A      3
3        B      4
4        B      5
5        B      6
6        C      7
7        C      8
8        C      9

在这个例子中:

  • var_name='Variable' 将原来的列名作为新列的名字。
  • value_name='Value' 将原来列中的值作为新列的值。

方法 2: 使用 stack 方法

stack 方法也可以将列转换为行,并将列名放到新列的索引中。

示例代码:

import pandas as pd

# 创建一个示例 DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
})

# 使用 stack 转换
stacked_df = df.stack().reset_index(name='Value')

# 将原始的列名(index)添加为一列
stacked_df.rename(columns={'level_0': 'Index', 'level_1': 'Variable'}, inplace=True)

print(stacked_df)

输出:

Index Variable  Value
0      0        A      1
1      1        A      2
2      2        A      3
3      0        B      4
4      1        B      5
5      2        B      6
6      0        C      7
7      1        C      8
8      2        C      9

在这个例子中:

  • stack() 会将 DataFrame 的列转为行。
  • reset_index() 会将原来的行索引重新设置,level_0 是原始的行索引,level_1 是列名。
  • 然后我们重命名 level_0level_1 为合适的列名。

总结:

  • melt 方法更简单,适用于将列名转换为值并保留数据的结构。
  • stack 方法更灵活,可以处理更复杂的情况,但需要额外的步骤来重命名索引。

根据你的需求选择适合的方式。


原文链接:codingdict.net