问题:如何替换 pandas 方法链中的特定行值。
这是我的代码:
days = np.arange(0,11)
rets = np.array([ 0.00, 0.02, 0.03, 0.04, -0.01, -0.02, 0.01, 0.02, -0.03, -0.05,0.10 ])
start = 100
df = pd.DataFrame({"time": days, "return":rets})
new_df = (df
.assign(**{f"lag_{i}":df["return"].add(1).iloc[1:].shift(-i).cumprod() for i in np.arange(6)})
)
new_df.iloc[0] = new_df.iloc[0].replace(np.nan,1) # add to method chain above
如何在方法链的最后一行进行操作。我的意思是使用方法链
new_df = (df
.assign(...)
.replace(...)
)
最佳答案
您实际上可以使用.replace
(使用任意值,不一定是na
-s):
new_df = (df
.assign(**{f"lag_{i}":df["return"].add(1).iloc[1:].shift(-i).cumprod() for i in np.arange(6)})
.T.replace({0: np.nan}, 1).T
)
它没有指定要填充哪一行的选项,但有 - 对于列!因此我们可以简单地在操作之前和之后转置数据帧。
.fillna
可以以类似的方式工作(但它仅替换 na
值):
new_df = (df
.assign(**{f"lag_{i}":df["return"].add(1).iloc[1:].shift(-i).cumprod() for i in np.arange(6)})
.T.fillna({0:1}).T
)
我必须在填充之前和之后转置数据框,因为目前它“只能逐列填充字典/系列”。
关于Pandas:使用方法链接替换某些列的特定行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73477700/