转发填充pandas数据帧中的特定列

时间:2014-11-19 08:31:40

标签: python pandas

如果我的数据框df包含多个列[' x',' y',' z']如何转发只填充一列&# 39; X' 或一组列[' x',' y']?

我只知道如何通过轴来做。

4 个答案:

答案 0 :(得分:46)

@Woody Pride建议的for循环是不必要的。您可以将其缩小为:

cols = ['X', 'Y']
df[cols] = df[cols].ffill()

我还添加了一个包含自我的示例:

>>> import pandas as pd
>>> import numpy as np
>>> 
>>> #%% create dataframe
... ts1 = [0, 1, np.nan, np.nan, np.nan, np.nan]
>>> ts2 = [0, 2, np.nan, 3, np.nan, np.nan]
>>> d =  {'X': ts1, 'Y': ts2, 'Z': ts2}
>>> df = pd.DataFrame(data=d)
>>> print(df.head())
    X   Y   Z
0   0   0   0
1   1   2   2
2 NaN NaN NaN
3 NaN   3   3
4 NaN NaN NaN
>>> 
>>> #%% apply forward fill
... col = ['X', 'Y']
>>> df[col] = df[col].ffill()
>>> print(df.head())
   X  Y   Z
0  0  0   0
1  1  2   2
2  1  2 NaN
3  1  3   3
4  1  3 NaN

(通常我会评论@Woody Pride的答案,但我没有代表。)

答案 1 :(得分:8)

for col in ['X', 'Y']:
    df[col] = df[col].ffill()

答案 2 :(得分:1)

我使用了下面的代码,这里的X和Y方法也可以不同于 ffill()

 df1 = df.fillna({
        'X' : df['X'].ffill(),
        'Y' : df['Y'].ffill(),
    })

答案 3 :(得分:1)

两个列可以同时为ffill(),如下所示:

df1 = df[['X','Y']].ffill()