pandas.DataFrame的pivot()和unstack()实现行转列

  • Post category:Python

下面是关于pandas.DataFramepivot()unstack()方法的详细讲解,以及它们的行转列操作的完整攻略。

什么是行转列?

行转列指的是一种数据操作技术,将原始数据集中的行转换为列,同时保留其他列的原始数据。这种技术常常被用于数据可视化、数据清洗等任务中,以便更好地展示数据。

pivot()和unstack()方法

pivot()unstack()方法是pandas.DataFrame对象中实现行转列操作的两个主要方法。它们具有不同的使用方式和适用场景。

pivot()方法

pivot()方法将数据从“长格式(long format)”转换为“宽格式(wide format)”。它的基本语法如下:

DataFrame.pivot(index=None, columns=None, values=None)

其中,三个参数的含义如下:

  • index:用于生成新表的新行索引的列
  • columns:用于生成新表的新列索引的列
  • values:用于填充新表的数据的列

具体来说,pivot()方法可以将一个带有多个列的长格式数据转换成一个基于两个列的宽格式数据,其中一个列用作新表的行索引,另一个列用作新表的列索引。示例如下:

import pandas as pd

df = pd.DataFrame({
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
    'C': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [10, 20, 30, 40, 50, 60, 70, 80]
})

# 将'B'列作为新表的行索引,'A'列作为新表的列索引,'D'列作为新表的数据
pivot_table = df.pivot(index='B', columns='A', values='D')

print(pivot_table)

输出结果如下所示:

A     bar   foo
B             
one  20.0  40.0
three 40.0  80.0
two  55.0  25.0

unstack()方法

unstack()方法也可以实现行转列操作。它可以将一个基于多个列的序列转换为一个基于两个列的表。它的基本语法如下:

DataFrame.unstack(level=-1, fill_value=None)

其中,两个参数的含义如下:

  • level:要转置的层级(默认为最后一级)
  • fill_value:缺失值的填充值(默认为None)

具体来说,unstack()方法可以将一个以某些列为索引的DataFrame或者Series对象,转换为一个以其他列为索引的DataFrame对象,列索引由原始数据的层级顺序决定。示例如下:

import pandas as pd

data = pd.Series([1, 2, 3, 4], index=[['A', 'A', 'B', 'B'], [1, 2, 1, 2]])

# 将第一级索引转换为列,生成一个二级索引的DataFrame对象
unstacked_data = data.unstack()

print(unstacked_data)

输出结果如下所示:

   1  2
A  1  2
B  3  4

总结

pivot()unstack()方法都可以实现行转列操作,不同的是pivot()方法将长格式数据转换成宽格式数据,而unstack()方法则是将一个以多个列为索引的序列转换成以其他列为索引的DataFrame对象。需要根据具体的数据形式和操作需求来选择使用哪一种方法实现行转列。

希望这篇攻略能够对您有所帮助。