【问题标题】:pandas - add missing rows on the basis of column values to have linspacepandas - 根据列值添加缺少的行以具有 linspace
【发布时间】:2023-03-16 13:20:01
【问题描述】:

我有一个类似的熊猫数据框

     a   b  c
0  0.5  10  7
1  1.0   6  6
2  2.0   1  7
3  2.5   6 -5
4  3.5   9  7

并且我想根据某个步骤填充与列“a”相关的缺失列。在这种情况下,给定步长 0.5,我想用缺失值填充“a”列,即 1.5 和 3.0,并将其他列设置为 null,以获得以下结果。

     a     b    c
0  0.5  10.0  7.0
1  1.0   6.0  6.0
2  1.5   NaN  NaN
3  2.0   1.0  7.0
4  2.5   6.0 -5.0
5  3.0   NaN  NaN
6  3.5   9.0  7.0

使用 pandas 或其他库(如 numpy 或 scipy)最干净的方法是什么?

谢谢!

【问题讨论】:

    标签: python pandas interpolation autofill linear-interpolation


    【解决方案1】:

    通过numpy.arange 创建数组,然后通过set_index 创建index,最后使用reindex 创建reindex

    step= .5
    idx = np.arange(df['a'].min(), df['a'].max() + step, step)
    df = df.set_index('a').reindex(idx).reset_index()
    print (df)
         a     b    c
    0  0.5  10.0  7.0
    1  1.0   6.0  6.0
    2  1.5   NaN  NaN
    3  2.0   1.0  7.0
    4  2.5   6.0 -5.0
    5  3.0   NaN  NaN
    6  3.5   9.0  7.0
    

    【讨论】:

      【解决方案2】:

      实现这一目标的一种简单方法是首先创建所需的索引,然后合并其上的剩余信息:

      import pandas as pd
      import numpy as np
      
      df = pd.DataFrame({'a': [0.5, 1, 2, 2.5, 3.5],
                         'b': [10, 6, 1, 6, 9],
                         'c': [7, 6, 7, -5, 7]})
      ls = np.arange(df.a.min(), df.a.max(), 0.5)
      new_df = pd.DataFrame({'a':ls})
      new_df = new_df.merge(df, on='a', how='left')
      

      【讨论】:

        猜你喜欢
        • 2013-07-01
        • 2022-11-13
        • 2017-11-09
        • 1970-01-01
        • 2017-11-25
        • 2016-08-11
        • 2020-05-20
        • 2018-12-06
        • 2018-03-14
        相关资源
        最近更新 更多