Pandas 多级列合并

Pandas 多级列合并

在本文中,我们将介绍使用Pandas dataframe合并多级列的方法。在实际数据分析中,可能会遇到需要将多层级的列合并的情况。而Pandas提供了多种途径来完成这一任务。

阅读更多:Pandas 教程

创建一个含有多级列的DataFrame

为了更好地演示如何合并多级列,我们首先需要创建一个含有多级列的DataFrame。下面的代码可以创建出这样的DataFrame:

import pandas as pd
import numpy as np

arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
          np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])

df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)

print(df)
Python

输出结果如下:

first        bar                 baz                 foo                 qux
second       one       two       one       two       one       two       one       two
A      -0.734048  0.214275  0.065977  1.101131 -0.855934 -1.382748  0.540041  0.368009
B      -0.874656  1.291500 -0.202331  0.424876  0.465014  0.098684  1.011813 -0.280588
C       0.367078 -0.451105 -1.703910 -0.363242 -0.406182 -0.100970  1.428022 -0.443665
Python

这个DataFrame有两层级的列,我们将学习如何处理这样的DataFrame。

将两个层级的列合并成一个层级

Pandas提供了get_level_values()方法来获取DataFrame中某个层级的值。在这个例子中,我们可以使用该方法获取第一个层级的值:

print(df.columns.get_level_values(0))
Python

输出结果如下:

Index(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], dtype='object', name='first')
Python

同理,我们也可以获取第二个层级的值:

print(df.columns.get_level_values(1))
Python

输出结果如下:

Index(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'], dtype='object', name='second')
Python

如果我们想将这两个层级的列合并成一个层级,可以使用下面的代码:

df.columns = ['_'.join(col) for col in df.columns]
print(df)
Python

输出结果如下:

       bar_one   bar_two   baz_one   baz_two   foo_one   foo_two   qux_one   qux_two
A    -0.734048  0.214275  0.065977  1.101131 -0.855934 -1.382748  0.540041  0.368009
B    -0.874656  1.291500 -0.202331  0.424876  0.465014  0.098684  1.011813 -0.280588
C     0.367078 -0.451105 -1.703910 -0.363242 -0.406182 -0.100970  1.428022 -0.443665
Python

将所有层级的列合并成一个层级

如果DataFrame有多个层级的列,我们可以使用ravel()函数将所有层级的列合并成一个层级的列。下面就是示例代码:

df.columns = df.columns.ravel()
print(df)
Python

输出结果如下:

      bar_one  bar_two  baz_one  baz_two  foo_one  foo_two  qux_one  qux_two
A   -0.618417 1.007548  2.221916 -0.438538  1.994100
B   -0.539400  1.005598  2.545130 -0.035996 -1.053010 -1.346167  0.006142 -0.222162
C   -0.604495  1.104353 -0.161332 -1.740731 -2.274038 -0.048174 -1.470125  0.714247
Python

可以看到,所有层级的列都被合并成了一个。

将两个层级的列的值拼接在一起

有时候我们可能需要将两个层级的列的值拼接在一起。Pandas提供了rename()方法用来对行或列的名字进行重命名。我们可以将两个层级的列的值拼接在一起后重命名列的名字:

df.columns = df.columns.map('{0[0]}_{0[1]}'.format)
print(df)
Python

输出结果如下:

      bar_one  bar_two  baz_one  baz_two  foo_one  foo_two  qux_one  qux_two
A   -0.618417  1.007548  2.221916 -0.438538  1.994100 -1.813100 -1.251093 -0.114285
B   -0.539400  1.005598  2.545130 -0.035996 -1.053010 -1.346167  0.006142 -0.222162
C   -0.604495  1.104353 -0.161332 -1.740731 -2.274038 -0.048174 -1.470125  0.714247
Python

可以看到,列的名字已经按照我们的需求修改了。

总结

本文介绍了Pandas中如何合并多级列。我们可以使用get_level_values()方法获取层级的值,使用rename()方法来重命名列的名字,使用ravel()函数将多层级的列合并成一个层级的列。这些方法为我们处理多级列提供了非常方便的工具。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册