如何在 Python Pandas 中折叠多列?

pythonpandasserver side programmingprogramming

Pandas 是 Python 中一个流行的数据操作库,广泛用于处理结构化数据。处理数据时的常见任务之一是清理和转换数据,以便为分析做好准备。

有时,数据可能包含具有相似信息或相互关联的多列。在这种情况下,将这些列折叠成一列可能很有用,以便于分析或可视化。

Pandas 提供了几种将多列折叠成一列的方法。在本教程中,我们将详细探讨这些方法,并提供示例来演示如何使用它们。在本教程结束时,您将更好地了解如何折叠 Pandas 中的多列,并能够将这些技术应用于您自己的数据集。

现在让我们讨论一下我们可以利用的两种不同方法来折叠 Pandas 中的多列。

使用 Pandas 中的 melt() 方法折叠多列

Pandas 中的 melt() 方法是将宽数据转换为长数据的强大工具。我们可以使用此方法将多列折叠成一列。

  • 要使用 melt() 方法,我们需要使用 value_vars 参数指定要保留为标识符变量的列以及要折叠成一列的列。

  • 生成的 DataFrame 将有一个新列,其中包含折叠列的值,旧列将转换为两列,一列用于标识符变量,一列用于值变量。

以下是使用 melt() 方法折叠多列的步骤 -

  • 导入 Pandas 库。

  • 将数据集加载到 DataFrame 中。

  • 在 DataFrame 上使用 melt() 方法,并使用 id_vars 参数指定标识符变量,使用 value_vars 指定要折叠的列参数。

  • 根据需要重命名列。

示例

现在让我们考虑相同的代码。

import pandas as pd
from tabulate import tabulate

data = {
   'name': ['Alice', 'Bob', 'Charlie'],
   'age': [25, 30, 35],
   'income_2019': [50000, 60000, 70000],
   'income_2020': [55000, 65000, 75000]}
df = pd.DataFrame(data)
print(tabulate(df, headers='keys', tablefmt='psql'))

print("\n Data Frame After Collapsing Similar Columns")

melted_df = df.melt(
   id_vars=['name', 'age'],
   value_vars=['income_2019', 'income_2020'],
   var_name='year',
   value_name='income')

print(tabulate(melted_df, headers = 'keys', tablefmt = 'psql'))

输出

执行此代码后,您将获得以下输出 -

观察原始表格以及在我们折叠和合并其相似列之后它的外观。

使用 Pandas 中的 stack() 方法折叠多列

Pandas 中的 stack() 方法是将多列折叠为单列的另一种方法。当要折叠的列具有分层索引时,我们可以使用此方法。

  • 要使用 stack() 方法,我们首先需要使用 set_index() 方法在 DataFrame 上创建一个 MultiIndex。

  • 然后,我们可以使用 stack() 方法折叠列并创建一个 Series 对象。

以下是使用 stack() 方法折叠多列的步骤 -

  • 导入 Pandas 库。

  • 将数据集加载到 DataFrame 中。

  • 使用 set_index() 方法在 DataFrame 上使用我们想要保留为标识符变量的列创建 MultiIndex。

  • 使用 stack() 方法折叠列。

  • 将生成的 Series 对象转换回DataFrame 使用 reset_index() 方法。

  • 根据需要重命名列。

示例

考虑下面显示的代码。

import pandas as pd
from tabulate import tabulate

data = {
   'name': ['Alice', 'Bob', 'Charlie'],
   'age': [25, 30, 35],
   'income': [(50000, 55000), (60000, 65000), (70000, 75000)]
}
df = pd.DataFrame(data)
print(tabulate(df, headers='keys', tablefmt='fancy_grid'))

df.set_index(['name', 'age'], inplace=True)
stacked_df = df['income'].apply(pd.Series)
print(tabulate(stacked_df, headers='keys', tablefmt='fancy_grid'))

输出

执行此代码后,您将获得以下输出 -

观察使用 stack() 方法折叠和合并 Pandas 数据框的某些列后的样子。

结论

总之,可以使用各种方法折叠 Pandas 中的多列,例如使用 melt() 和 stack() 方法。这两种方法都是将宽数据转换为长数据的强大工具,它们可用于将多列折叠为单列。方法的选择取决于特定的数据集和需要折叠的列的结构。通过使用这些方法,我们可以创建一个更有条理、更高效的数据集,这对于数据分析和机器学习应用至关重要。

Pandas 提供了各种强大的数据操作工具,掌握这些工具可以大大增强你分析和处理数据的能力。


相关文章