如何对列标题中的n个列使用ffill()

时间:2019-06-17 10:27:45

标签: python pandas

需要从前一行的值中填入nN列的NaN值

我正在尝试通过Pandas Dataframe实现以下目标。

  1. 创建行列表并将其合并以在行标题中组合列。

  2. 下一步,我必须使用ffill()来填充上一行的NaN值。为此,我尝试使用基于r_col(行标题中的列)和c_col(列标题中的列)参数的if条件,但这不是最佳方法,因为c_col和r_col可以是n个列和行。

以下是我针对相同逻辑的代码。

cols = df.iloc[:r_col].astype(str).apply(lambda x: x.name + '__' + '__'.join(x))   

df.columns = cols

if (r_col == 2):
    for a in range(0, c_col+1):
        df = df.iloc[:,:].rename(columns={'Unnamed: ' + str(a) + '__nan':'Column' + str(a)}).ffill()

if (r_col == 3):
    for a in range(0, c_col+1):
        df = df.iloc[:,:].rename(columns={'Unnamed: ' + str(a) + '__nan__nan':'Column' + str(a)}).ffill()        

我需要基于c_col参数在Column header手段中为n个列填充NaN值,并且应该在“ df.column = cols”行之后执行。

1 个答案:

答案 0 :(得分:0)

尝试使用df[x].fillna(y)df[x].fillna(y, inplace=True)。 x是您选择的任何列,y是您选择的任何值。例如:

1 0.0001
2 NaN
3 0.03

给予

1 0.0001
2 0.0000
3 0.03

list_nan_values = [1,2,3, 21, 44]   # variables list to fill NaN with
nan_locations   = [1,2,8,19,67]     # positional location of NaN in specific column you have selected.

for i in range(len(nan_locations)+1):
    df[i] = df[nan_locations[i]].fillna(list_nan_values[i])

享受。