首页 > 解决方案 > 按组用另一个数据框的增长率填充熊猫数据框的缺失值

问题描述

我正在尝试通过使用系列“Y”向后增长(假设它是百分比增长率)来填充系列“X”的缺失值。我正在尝试按“G”组执行此操作。当我调试时,我可以看到我的函数“Fillbackwards”正在做我希望它为每个组做的事情。但是,当我使用 apply 在每个组上使用此函数时,它会返回一个空数据框。有谁知道我错过了什么?

谢谢

编辑澄清我想通过使用另一个系列向后增长系列来填充 na。

import pandas as pd
import numpy as np


df = pd.DataFrame({'X':[np.nan, np.nan, 6, 6.7, np.nan, 5, 9, 10], 
                   'Y':[5.4, 5.7, 5.5, 6.1, 2.1, 1.5, 5.1, 2.1,],
                   'G': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B']})


def Fillbackwards(DB, Sname, Growthrate):
    first_non_nan = DB[Sname].isnull().idxmin()
    while first_non_nan-DB.index[0] > 0:
        # Note the index of the group within the dataframe does not start at 0 as it's part of a larger frame - DB.index[0] restarts from zero
        DB.loc[first_non_nan-1-DB.index[0], Sname] = DB.loc[first_non_nan-DB.index[0], Sname]/(DB.loc[first_non_nan-DB.index[0], Growthrate]/100+1)
        first_non_nan -= 1

df = df.groupby('G').apply(lambda x: Fillbackwards(x, 'X', 'Y'))

标签: pythonpandas

解决方案


您是否只是想用 Y 中的值填充 X 中的 NaN 值?

import pandas as pd
import numpy as np


df = pd.DataFrame({'X':[np.nan, np.nan, 6, 6.7, np.nan, 5, 9, 10], 
                   'Y':[5.4, 5.7, 5.5, 6.1, 2.1, 1.5, 5.1, 2.1,],
                   'G': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B']})

df['X'] = df['X'].fillna(df['Y'])

pandas 有一个内置的方法来处理这个


推荐阅读