首页 > 解决方案 > 根据索引设置 Multiindex 列的值

问题描述

这是我的多索引数据框:

                        A   B   C   D   E   F     G   H    I    J
Chars  Date
       2020 January   4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 February  4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 March     4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 April     4.0  66  45  26  99  20  13.5  15  3.8  3.2
Chars2 2020 January   4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 February  4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 March     4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 April     4.0  66  45  26  99  20  13.5  15  3.8  3.2

例如,我想在 3 月和 3 月之后进行更改,但只更改“B”列。我怎样才能做到这一点?

我努力了:

df.xs('Chars2')[df['B'].index.get_level_values(1).month >= 3] = 20.40

我收到了这个错误:

AttributeError: 'Index' object has no attribute 'month'

然后,我尝试了这样的事情。但我无法达到我想要的输出。

df.loc[pd.IndexSlice['B', pd.to_datetime(df.index.get_level_values(1), errors = 'coerce').month >= 3] = 20.40

我的预期输出:

                        A   B   C   D   E   F     G   H    I    J
Chars  Date
       2020 January   4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 February  4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 March     4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 April     4.0  66  45  26  99  20  13.5  15  3.8  3.2
Chars2 2020 January   4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 February  4.0  66  45  26  99  20  13.5  15  3.8  3.2
       2020 March     4.0 20.4 45  26  99  20  13.5  15  3.8  3.2
       2020 April     4.0 20.4 45  26  99  20  13.5  15  3.8  3.2

标签: pandasindexingmulti-index

解决方案


创建 2 个掩码,将它们按&位与链接,然后设置值B

m1 = pd.to_datetime(df.index.get_level_values(1), errors = 'coerce').month >= 3
m2 = df.index.get_level_values(0) == 'Chars2'

df.loc[m1 & m2, 'B'] = 20.54
print (df)
                        A      B   C   D   E   F     G   H    I    J
Ch     Date                                                         
Chars  2020 January   4.0  66.00  45  26  99  20  13.5  15  3.8  3.2
       2020 February  4.0  66.00  45  26  99  20  13.5  15  3.8  3.2
       2020 March     4.0  66.00  45  26  99  20  13.5  15  3.8  3.2
       2020 April     4.0  66.00  45  26  99  20  13.5  15  3.8  3.2
Chars2 2020 January   4.0  66.00  45  26  99  20  13.5  15  3.8  3.2
       2020 February  4.0  66.00  45  26  99  20  13.5  15  3.8  3.2
       2020 March     4.0  20.54  45  26  99  20  13.5  15  3.8  3.2
       2020 April     4.0  20.54  45  26  99  20  13.5  15  3.8  3.2

推荐阅读