[英]How to forward propagate/fill a specific value in a Pandas DataFrame Column/Series?
[英]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.