多级索引填充数据框

2024-05-14 09:48:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个df:

       Allotments  SH_Class  SH_Percent
       A. Annex       BNW   16.187500
       A. Annex      MTGP   1.0000000
       A. Annex    Meadow   39.687500
       A. Annex       PHP   29.687500
       A. Annex        SP   16.250000
       A. Annex     WMTGP   10.833333
       A. Annex  Woodland    5.000000
       Arnstson    Meadow   28.750000
       Arnstson       PHP   61.590909
       Arnstson        SP   18.125000
       Arnstson     WMTGP    2.500000
       Arnstson  Woodland   17.083333

我希望SH_Class对于每个唯一的Allotments都是相同的。因此,即使Arnstson中没有MTGPBNW,我希望它加上相应的SH_Percent为零。我期望的输出是:

       Allotments  SH_Class  SH_Percent
       A. Annex       BNW   16.187500
       A. Annex      MTGP   1.0000000
       A. Annex    Meadow   39.687500
       A. Annex       PHP   29.687500
       A. Annex        SP   16.250000
       A. Annex     WMTGP   10.833333
       A. Annex  Woodland    5.000000
       Arnstson       BNW   0.0000000
       Arnstson      MTGP   0.0000000
       Arnstson    Meadow   28.750000
       Arnstson       PHP   61.590909
       Arnstson        SP   18.125000
       Arnstson     WMTGP    2.500000
       Arnstson  Woodland   17.083333

我尝试过以下代码:

target_ix = pd.MultiIndex.from_product([df.Allotments.unique(),
    levels='BNW', 'MTGP', 'Meadow', 'PHP', 'SP', 'WMTGP', 'Woodland'])
new_df = df.loc[target_ix]

但这并不完全正确


Tags: targetdfshspclassphppercentannex
1条回答
网友
1楼 · 发布于 2024-05-14 09:48:39

你很接近

idx = pd.MultiIndex.from_product([df.Allotments.unique(), df.SH_Class.unique()],
                                 names=['Allotments', 'SH_Class'])

>>> df.set_index(['Allotments', 'SH_Class']).ix[idx].fillna(0).reset_index()
   Allotments  SH_Class  SH_Percent
0    A. Annex       BNW   16.187500
1    A. Annex      MTGP    1.000000
2    A. Annex    Meadow   39.687500
3    A. Annex       PHP   29.687500
4    A. Annex        SP   16.250000
5    A. Annex     WMTGP   10.833333
6    A. Annex  Woodland    5.000000
7    Arnstson       BNW    0.000000
8    Arnstson      MTGP    0.000000
9    Arnstson    Meadow   28.750000
10   Arnstson       PHP   61.590909
11   Arnstson        SP   18.125000
12   Arnstson     WMTGP    2.500000
13   Arnstson  Woodland   17.083333

相关问题 更多 >

    热门问题