【问题标题】:Filling in data based on index根据索引填写数据
【发布时间】:2020-09-01 04:35:43
【问题描述】:

我有一个多索引数据框,如图所示;


            A       B       C       D       E       F       G       H       I
2019    8   15.0    15.0    8.0     9.0     18.0    27.0    56.0    21.0    168.0
        9   20.0    21.0    11.0    12.0    26.0    37.0    73.0    41.0    241.0
        10  25.0    39.0    20.0    19.0    51.0    49.0    133.0   74.0    411.0
        11  32.0    65.0    34.0    26.0    110.0   110.0   193.0   147.0   718.0
        12  36.0    72.0    38.0    31.0    122.0   152.0   205.0   167.0   821.0
2020    1   42.0    73.0    39.0    35.0    131.0   179.0   205.0   173.0   876.0
        2   32.0    71.0    37.0    30.0    113.0   141.0   212.0   151.0   787.0
        3   29.0    60.0    32.0    26.0    99.0    120.0   187.0   145.0   700.0
        4   20.0    32.0    16.0    17.0    45.0    62.0    108.0   82.0    381.0
        5   16.0    28.0    15.0    13.0    37.0    38.0    96.0    71.0    314.0

我想在今年剩下的时间里将另一个数据框附加到末尾,其中每个列都有一个月值。


    A       B       C       D       E       F       G       H       I                               
1   41.0    84.0    41.0    37.0    144.0   183.0   221.0   187.0   952.0
2   35.0    80.0    40.0    34.0    131.0   165.0   219.0   174.0   875.0
3   29.0    65.0    32.0    27.0    102.0   123.0   191.0   145.0   701.0
4   20.0    39.0    20.0    18.0    59.0    64.0    137.0   88.0    432.0
5   15.0    26.0    14.0    13.0    40.0    43.0    96.0    55.0    303.0
6   12.0    18.0    9.0     10.0    24.0    35.0    71.0    26.0    200.0
7   12.0    15.0    7.0     9.0     20.0    32.0    58.0    21.0    174.0
8   12.0    16.0    8.0     9.0     18.0    26.0    59.0    21.0    170.0
9   17.0    22.0    11.0    12.0    27.0    37.0    77.0    40.0    240.0
10  23.0    39.0    19.0    19.0    55.0    54.0    120.0   80.0    408.0
11  31.0    63.0    31.0    28.0    110.0   111.0   180.0   137.0   716.0
12  36.0    71.0    36.0    32.0    131.0   168.0   200.0   161.0   858.0

我需要尝试附加数据框,以使用第二个数据框的值填充第一个数据框的任何空白月份。

我想有两个问题; - 我是否需要在第二个数据帧上添加第二个索引才能加入这些? - 我想我需要做某种形式的“if”语句来说明只填充未来的空白月份?

在 join/concat/append 上的很多尝试都给了我以下信息;

(2019, 12)  36.0    72.0    38.0    31.0    122.0   152.0   205.0   167.0   821.0
(2020, 1)   42.0    73.0    39.0    35.0    131.0   179.0   205.0   173.0   876.0
(2020, 2)   32.0    71.0    37.0    30.0    113.0   141.0   212.0   151.0   787.0
(2020, 3)   29.0    60.0    32.0    26.0    99.0    120.0   187.0   145.0   700.0
(2020, 4)   20.0    32.0    16.0    17.0    45.0    62.0    108.0   82.0    381.0
(2020, 5)   16.0    28.0    15.0    13.0    37.0    38.0    96.0    71.0    314.0
1           41.0    84.0    41.0    37.0    144.0   183.0   221.0   187.0   952.0
2           35.0    80.0    40.0    34.0    131.0   165.0   219.0   174.0   875.0
3           29.0    65.0    32.0    27.0    102.0   123.0   191.0   145.0   701.0
4           20.0    39.0    20.0    18.0    59.0    64.0    137.0   88.0    432.0
5           15.0    26.0    14.0    13.0    40.0    43.0    96.0    55.0    303.0
6           12.0    18.0    9.0 10.0    24.0    35.0    71.0    26.0    200.0
7           12.0    15.0    7.0 9.0 20.0    32.0    58.0    21.0    174.0
8           12.0    16.0    8.0 9.0 18.0    26.0    59.0    21.0    170.0
9           17.0    22.0    11.0    12.0    27.0    37.0    77.0    40.0    240.0
10          23.0    39.0    19.0    19.0    55.0    54.0    120.0   80.0    408.0
11          31.0    63.0    31.0    28.0    110.0   111.0   180.0   137.0   716.0
12          36.0    71.0    36.0    32.0    131.0   168.0   200.0   161.0   858.0

所以我需要新的数据框来填充基于月份的第一个数据框。

非常感谢任何帮助,似乎无法弄清楚。

【问题讨论】:

标签: python pandas datetime indexing multi-index


【解决方案1】:

DataFrame.combine_firstDataFrame.reindex 一起使用第二个DataFrame,年份值来自df1

mux = pd.MultiIndex.from_product([df1.index.levels[0], df2.index])
df = df1.combine_first(df2.reindex(mux, level=1))
print (df)
            A     B     C     D      E      F      G      H      I
2019 1   41.0  84.0  41.0  37.0  144.0  183.0  221.0  187.0  952.0
     2   35.0  80.0  40.0  34.0  131.0  165.0  219.0  174.0  875.0
     3   29.0  65.0  32.0  27.0  102.0  123.0  191.0  145.0  701.0
     4   20.0  39.0  20.0  18.0   59.0   64.0  137.0   88.0  432.0
     5   15.0  26.0  14.0  13.0   40.0   43.0   96.0   55.0  303.0
     6   12.0  18.0   9.0  10.0   24.0   35.0   71.0   26.0  200.0
     7   12.0  15.0   7.0   9.0   20.0   32.0   58.0   21.0  174.0
     8   15.0  15.0   8.0   9.0   18.0   27.0   56.0   21.0  168.0
     9   20.0  21.0  11.0  12.0   26.0   37.0   73.0   41.0  241.0
     10  25.0  39.0  20.0  19.0   51.0   49.0  133.0   74.0  411.0
     11  32.0  65.0  34.0  26.0  110.0  110.0  193.0  147.0  718.0
     12  36.0  72.0  38.0  31.0  122.0  152.0  205.0  167.0  821.0
2020 1   42.0  73.0  39.0  35.0  131.0  179.0  205.0  173.0  876.0
     2   32.0  71.0  37.0  30.0  113.0  141.0  212.0  151.0  787.0
     3   29.0  60.0  32.0  26.0   99.0  120.0  187.0  145.0  700.0
     4   20.0  32.0  16.0  17.0   45.0   62.0  108.0   82.0  381.0
     5   16.0  28.0  15.0  13.0   37.0   38.0   96.0   71.0  314.0
     6   12.0  18.0   9.0  10.0   24.0   35.0   71.0   26.0  200.0
     7   12.0  15.0   7.0   9.0   20.0   32.0   58.0   21.0  174.0
     8   12.0  16.0   8.0   9.0   18.0   26.0   59.0   21.0  170.0
     9   17.0  22.0  11.0  12.0   27.0   37.0   77.0   40.0  240.0
     10  23.0  39.0  19.0  19.0   55.0   54.0  120.0   80.0  408.0
     11  31.0  63.0  31.0  28.0  110.0  111.0  180.0  137.0  716.0
     12  36.0  71.0  36.0  32.0  131.0  168.0  200.0  161.0  858.0

【讨论】:

    猜你喜欢
    • 2011-05-17
    • 2023-03-08
    • 1970-01-01
    • 2018-11-23
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2021-06-18
    相关资源
    最近更新 更多