37

您所在的位置:网站首页 set怎么消除 37

37

2024-05-26 20:56| 来源: 网络整理| 查看: 265

37_Pandas中Multiindex的指定,添加,取消,排序,级别的更改

在Pandas中设置了Multiindex(多索引,层次索引)可以更轻松地查看每个层次中每个项目的统计信息。

这里,将描述关于多索引设置的以下内容。

读取文件时设置:read_csv()指定/添加数据列到多索引:set_index()取消多索引:reset_index()排序多索引:sort_index()更改多索引级别:swaplevel() 以下面的数据为例。 import pandas as pd df = pd.read_csv('./data/37/sample_multi.csv') print(df) # level_1 level_2 level_3 val_1 val_2 # 0 A0 B0 C0 98 90 # 1 A0 B0 C1 44 9 # 2 A0 B1 C2 39 17 # 3 A0 B1 C3 75 71 # 4 A1 B2 C0 1 89 # 5 A1 B2 C1 54 60 # 6 A1 B3 C2 47 6 # 7 A1 B3 C3 16 5 # 8 A2 B0 C0 75 22 # 9 A2 B0 C1 19 4 # 10 A2 B1 C2 25 52 # 11 A2 B1 C3 57 40 # 12 A3 B2 C0 64 54 # 13 A3 B2 C1 27 96 # 14 A3 B3 C2 100 77 # 15 A3 B3 C3 22 50 读取文件时设置:read_csv()

如果要从文件读取数据,则可以在读取时设置多索引。 在read_csv()方法中,如果在列表中的参数index_col中指定列名或列号,则它将成为多索引。

df_m_csv = pd.read_csv('./data/37/sample_multi.csv', index_col=['level_1', 'level_2', 'level_3']) print(df_m_csv) # val_1 val_2 # level_1 level_2 level_3 # A0 B0 C0 98 90 # C1 44 9 # B1 C2 39 17 # C3 75 71 # A1 B2 C0 1 89 # C1 54 60 # B3 C2 47 6 # C3 16 5 # A2 B0 C0 75 22 # C1 19 4 # B1 C2 25 52 # C3 57 40 # A3 B2 C0 64 54 # C1 27 96 # B3 C2 100 77 # C3 22 50

有关read_csv()方法的详细信息,请参阅以下文章。

03_Pandas读取csv/tsv文件(read_csv,read_table) 指定/添加数据列到多索引:set_index()

使用set_index()方法可将现有pandas.DataFrame对象中的多个数据列指定为多索引。 在第一个参数键中指定列名称的列表。

df_m = df.set_index(['level_1', 'level_2', 'level_3']) print(df_m) # val_1 val_2 # level_1 level_2 level_3 # A0 B0 C0 98 90 # C1 44 9 # B1 C2 39 17 # C3 75 71 # A1 B2 C0 1 89 # C1 54 60 # B3 C2 47 6 # C3 16 5 # A2 B0 C0 75 22 # C1 19 4 # B1 C2 25 52 # C3 57 40 # A3 B2 C0 64 54 # C1 27 96 # B3 C2 100 77 # C3 22 50

在将数据列作为多索引添加到已建立索引的pandas.DataFrame对象时,也会使用Set_index()。

当参数append为True时添加。请注意,默认值为append = False,它将被新索引覆盖。

df_m_1 = df.set_index('level_1') print(df_m_1) # level_2 level_3 val_1 val_2 # level_1 # A0 B0 C0 98 90 # A0 B0 C1 44 9 # A0 B1 C2 39 17 # A0 B1 C3 75 71 # A1 B2 C0 1 89 # A1 B2 C1 54 60 # A1 B3 C2 47 6 # A1 B3 C3 16 5 # A2 B0 C0 75 22 # A2 B0 C1 19 4 # A2 B1 C2 25 52 # A2 B1 C3 57 40 # A3 B2 C0 64 54 # A3 B2 C1 27 96 # A3 B3 C2 100 77 # A3 B3 C3 22 50 df_m_2 = df_m_1.set_index('level_2', append=True) print(df_m_2) # level_3 val_1 val_2 # level_1 level_2 # A0 B0 C0 98 90 # B0 C1 44 9 # B1 C2 39 17 # B1 C3 75 71 # A1 B2 C0 1 89 # B2 C1 54 60 # B3 C2 47 6 # B3 C3 16 5 # A2 B0 C0 75 22 # B0 C1 19 4 # B1 C2 25 52 # B1 C3 57 40 # A3 B2 C0 64 54 # B2 C1 27 96 # B3 C2 100 77 # B3 C3 22 50

在此示例中,返回了一个新对象,但是如果set_index()的参数位置为True,则将更改名为set_index()的对象。 另请参阅以下有关set_index()的文章。

22_Pandas.DataFrame,重置列的行名(set_index) 取消多索引:reset_index()

使用reset_index()方法可取消多索引。 如果未指定任何参数,则将释放所有索引列并将其添加到数据列。

df_r_all = df_m.reset_index() print(df_r_all) # level_1 level_2 level_3 val_1 val_2 # 0 A0 B0 C0 98 90 # 1 A0 B0 C1 44 9 # 2 A0 B1 C2 39 17 # 3 A0 B1 C3 75 71 # 4 A1 B2 C0 1 89 # 5 A1 B2 C1 54 60 # 6 A1 B3 C2 47 6 # 7 A1 B3 C3 16 5 # 8 A2 B0 C0 75 22 # 9 A2 B0 C1 19 4 # 10 A2 B1 C2 25 52 # 11 A2 B1 C3 57 40 # 12 A3 B2 C0 64 54 # 13 A3 B2 C1 27 96 # 14 A3 B3 C2 100 77 # 15 A3 B3 C3 22 50

如果只想从多索引中释放特定的索引列,请在参数级别将列名称指定为字符串,或者将级别(层次结构)指定为整数值。外部(主要项目)的级别(层次结构)为0。 在列名或级别值的列表中指定时,将释放多个索引列。

df_r_1 = df_m.reset_index(level='level_1') print(df_r_1) # level_1 val_1 val_2 # level_2 level_3 # B0 C0 A0 98 90 # C1 A0 44 9 # B1 C2 A0 39 17 # C3 A0 75 71 # B2 C0 A1 1 89 # C1 A1 54 60 # B3 C2 A1 47 6 # C3 A1 16 5 # B0 C0 A2 75 22 # C1 A2 19 4 # B1 C2 A2 25 52 # C3 A2 57 40 # B2 C0 A3 64 54 # C1 A3 27 96 # B3 C2 A3 100 77 # C3 A3 22 50 df_r_1 = df_m.reset_index(level=0) print(df_r_1) # level_1 val_1 val_2 # level_2 level_3 # B0 C0 A0 98 90 # C1 A0 44 9 # B1 C2 A0 39 17 # C3 A0 75 71 # B2 C0 A1 1 89 # C1 A1 54 60 # B3 C2 A1 47 6 # C3 A1 16 5 # B0 C0 A2 75 22 # C1 A2 19 4 # B1 C2 A2 25 52 # C3 A2 57 40 # B2 C0 A3 64 54 # C1 A3 27 96 # B3 C2 A3 100 77 # C3 A3 22 50 df_r_2 = df_m.reset_index(level=['level_1', 'level_2']) print(df_r_2) # level_1 level_2 val_1 val_2 # level_3 # C0 A0 B0 98 90 # C1 A0 B0 44 9 # C2 A0 B1 39 17 # C3 A0 B1 75 71 # C0 A1 B2 1 89 # C1 A1 B2 54 60 # C2 A1 B3 47 6 # C3 A1 B3 16 5 # C0 A2 B0 75 22 # C1 A2 B0 19 4 # C2 A2 B1 25 52 # C3 A2 B1 57 40 # C0 A3 B2 64 54 # C1 A3 B2 27 96 # C2 A3 B3 100 77 # C3 A3 B3 22 50

如果要从多索引中释放并将其从数据列中删除,请将参数drop设置为True。

df_r_drop = df_m.reset_index(level='level_1', drop=True) print(df_r_drop) # val_1 val_2 # level_2 level_3 # B0 C0 98 90 # C1 44 9 # B1 C2 39 17 # C3 75 71 # B2 C0 1 89 # C1 54 60 # B3 C2 47 6 # C3 16 5 # B0 C0 75 22 # C1 19 4 # B1 C2 25 52 # C3 57 40 # B2 C0 64 54 # C1 27 96 # B3 C2 100 77 # C3 22 50

在该示例中,返回了一个新对象,但是如果reset_index()也将参数place设置为True,则名为reset_index()的对象将更改。 另请参见以下有关reset_index()的文章。

21_Pandas.DataFrame,重置Series的索引index(reset_index) 排序多索引:sort_index()

使用sort_index()对多索引索引列进行排序。 如果像上面的示例那样释放索引列,则更容易查看是否再次对其进行排序。 如果未指定任何参数,则将按级别顺序对其进行排序。

df_r_drop_sort = df_r_drop.sort_index() print(df_r_drop_sort) # val_1 val_2 # level_2 level_3 # B0 C0 98 90 # C0 75 22 # C1 44 9 # C1 19 4 # B1 C2 39 17 # C2 25 52 # C3 75 71 # C3 57 40 # B2 C0 1 89 # C0 64 54 # C1 54 60 # C1 27 96 # B3 C2 47 6 # C2 100 77 # C3 16 5 # C3 22 50

如果要按特定的索引列排序,请在参数级别中指定列名称或级别值或它们的列表。

df_r_drop_sort_2 = df_r_drop.sort_index(level='level_3') print(df_r_drop_sort_2) # val_1 val_2 # level_2 level_3 # B0 C0 98 90 # C0 75 22 # B2 C0 1 89 # C0 64 54 # B0 C1 44 9 # C1 19 4 # B2 C1 54 60 # C1 27 96 # B1 C2 39 17 # C2 25 52 # B3 C2 47 6 # C2 100 77 # B1 C3 75 71 # C3 57 40 # B3 C3 16 5 # C3 22 50

另请参见以下有关sort_index()的文章。

17_pandas.DataFrame,Series排序(sort_values,sort_index) 更改多索引级别:swaplevel()

使用swaplevel()方法更改多索引级别(层次结构)的顺序。 如果在第一个和第二个参数中指定列名或级别值,则将交换两个级别(层次结构)。

print(df_m) # val_1 val_2 # level_1 level_2 level_3 # A0 B0 C0 98 90 # C1 44 9 # B1 C2 39 17 # C3 75 71 # A1 B2 C0 1 89 # C1 54 60 # B3 C2 47 6 # C3 16 5 # A2 B0 C0 75 22 # C1 19 4 # B1 C2 25 52 # C3 57 40 # A3 B2 C0 64 54 # C1 27 96 # B3 C2 100 77 # C3 22 50 df_m_swap = df_m.swaplevel('level_1', 'level_3') print(df_m_swap) # val_1 val_2 # level_3 level_2 level_1 # C0 B0 A0 98 90 # C1 B0 A0 44 9 # C2 B1 A0 39 17 # C3 B1 A0 75 71 # C0 B2 A1 1 89 # C1 B2 A1 54 60 # C2 B3 A1 47 6 # C3 B3 A1 16 5 # C0 B0 A2 75 22 # C1 B0 A2 19 4 # C2 B1 A2 25 52 # C3 B1 A2 57 40 # C0 B2 A3 64 54 # C1 B2 A3 27 96 # C2 B3 A3 100 77 # C3 B3 A3 22 50 df_m_swap = df_m.swaplevel(0, 2) print(df_m_swap) # val_1 val_2 # level_3 level_2 level_1 # C0 B0 A0 98 90 # C1 B0 A0 44 9 # C2 B1 A0 39 17 # C3 B1 A0 75 71 # C0 B2 A1 1 89 # C1 B2 A1 54 60 # C2 B3 A1 47 6 # C3 B3 A1 16 5 # C0 B0 A2 75 22 # C1 B0 A2 19 4 # C2 B1 A2 25 52 # C3 B1 A2 57 40 # C0 B2 A3 64 54 # C1 B2 A3 27 96 # C2 B3 A3 100 77 # C3 B3 A3 22 50

很容易看出是否按sore_index()排序。

df_m_swap_sort = df_m.swaplevel('level_1', 'level_3').sort_index() print(df_m_swap_sort) # val_1 val_2 # level_3 level_2 level_1 # C0 B0 A0 98 90 # A2 75 22 # B2 A1 1 89 # A3 64 54 # C1 B0 A0 44 9 # A2 19 4 # B2 A1 54 60 # A3 27 96 # C2 B1 A0 39 17 # A2 25 52 # B3 A1 47 6 # A3 100 77 # C3 B1 A0 75 71 # A2 57 40 # B3 A1 16 5 # A3 22 50

如果要以任何顺序更改级别而不是交换两个级别,请使用reset_index()取消,然后使用set_index()再次设置。

df_m_change = df_m.reset_index().set_index(['level_2', 'level_3', 'level_1']).sort_index() print(df_m_change) # val_1 val_2 # level_2 level_3 level_1 # B0 C0 A0 98 90 # A2 75 22 # C1 A0 44 9 # A2 19 4 # B1 C2 A0 39 17 # A2 25 52 # C3 A0 75 71 # A2 57 40 # B2 C0 A1 1 89 # A3 64 54 # C1 A1 54 60 # A3 27 96 # B3 C2 A1 47 6 # A3 100 77 # C3 A1 16 5 # A3 22 50


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3