【问题标题】:How to shift rows in python pandas dataframe如何在 python pandas 数据框中移动行
【发布时间】:2021-06-24 12:33:03
【问题描述】:

我有一个数据框,在删除第一行并在每次迭代中最后添加 DFM 值为 100% 的新行之后,我需要在这十行下方复制所有 10 行第 50 次。如下例所示。

df1:-

    Cal     Group       DFM
     1     period 1    39.36%
     2     period 1    98.89
     3     period 1    99.95%
     4     period 1    99.97%
     5     period 1    99.99%
     6     period 1    100.00%
     7     period 1    100.00%
     8     period 1    100.00%
     9     period 1    100.00%
    10    period 1    100.00%
     

结果:- 我已打印 3 次并将值移动 3 次。但我需要一次又一次地这样做 50 次。

    Cal     Group       DFM
     1     period 1    39.36%
     2     period 1    98.89
     3     period 1    99.95%
     4     period 1    99.97%
     5     period 1    99.99%
     6     period 1    100.00%
     7     period 1    100.00%
     8     period 1    100.00%
     9     period 1    100.00%
    10    period 1    100.00%
     1      period 1    98.89
     2     period 1    99.95%
     3     period 1    99.97%
     4     period 1    99.99%
     5     period 1    100.00%
     6     period 1    100.00%
     7     period 1    100.00%
     8     period 1    100.00%
     9     period 1    100.00%
    10    period 1    100.00%
     1     period 1    99.95%
     2     period 1    99.97%
     3     period 1    99.99%
     4     period 1    100.00%
     5     period 1    100.00%
     6     period 1    100.00%
     7     period 1    100.00%
     8    period 1    100.00%
     9    period 1    100.00%
    10    period 1    100.00%

【问题讨论】:

    标签: python pandas numpy shift


    【解决方案1】:

    您可以将列表推导与shifted 版本的数据框一起使用,然后将它们一起使用concatanate。为了将CalGroup 保留在计算之外,我们首先将它们设置为索引。此外,由于移位会导致DFM 中的缺失值,我们将所需的填充值(即"100.00%")传递给shift。最后,我们重新设置索引以再次获取CalGroup 作为列:

    df_with_new_idx = df.set_index(["Cal", "Group"])
    
    repeat = 50
    new_df = pd.concat([df_with_new_idx.shift(-j, fill_value="100.00%")
                        for j in range(repeat)])
    
    new_df = new_df.reset_index()
    

    为了说明,重复 3 次而不是上面的 50 次,我得到:

    >>> new_df
    
        Cal     Group      DFM
    0     1  period 1   39.36%
    1     2  period 1    98.89
    2     3  period 1   99.95%
    3     4  period 1   99.97%
    4     5  period 1   99.99%
    5     6  period 1  100.00%
    6     7  period 1  100.00%
    7     8  period 1  100.00%
    8     9  period 1  100.00%
    9    10  period 1  100.00%
    10    1  period 1    98.89
    11    2  period 1   99.95%
    12    3  period 1   99.97%
    13    4  period 1   99.99%
    14    5  period 1  100.00%
    15    6  period 1  100.00%
    16    7  period 1  100.00%
    17    8  period 1  100.00%
    18    9  period 1  100.00%
    19   10  period 1  100.00%
    20    1  period 1   99.95%
    21    2  period 1   99.97%
    22    3  period 1   99.99%
    23    4  period 1  100.00%
    24    5  period 1  100.00%
    25    6  period 1  100.00%
    26    7  period 1  100.00%
    27    8  period 1  100.00%
    28    9  period 1  100.00%
    29   10  period 1  100.00%
    

    【讨论】:

    猜你喜欢
    • 2021-08-26
    • 2015-12-09
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多