簡體   English   中英

前向填充熊貓數據框中的特定列

[英]forward fill specific columns in pandas dataframe

如果我有一個包含多列['x', 'y', 'z']的數據框,我如何只向前填充一列'x' 還是一組列['x','y']

我只知道如何通過軸來做到這一點。

tl;博士:

cols = ['X', 'Y']
df.loc[:,cols] = df.loc[:,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
... cols = ['X', 'Y']
>>> df.loc[:,cols] = df.loc[:,cols].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
for col in ['X', 'Y']:
    df[col] = df[col].ffill()

兩列可以同時進行ffill() ,如下所示:

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

我使用了下面的代碼,這里的 X 和 Y 方法也可以不同,而不是ffill()

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

我認為最簡單的版本。

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

或者使用inplace參數:

df['X'].ffill(inplace=True)
df['Y'].ffill(inplace=True)

不,你不能做df[['X','Y]].ffill(inplace=True)因為這首先通過列選擇創建一個切片,因此就地向前填充會創建一個 SettingWithCopyWarning。 當然,如果您有一個列列表,您可以在循環中執行此操作:

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

inplace使用的要點是避免復制列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM