Pandas:使用方法链接替换某些列的特定行值

标签 pandas method-chaining

问题:如何替换 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/

相关文章:

python - 如何创建 3 列散点图

python - 查找每列的最新行

python - 值错误: unknown type object pandas eval for n rows => 100

python - 使用唯一索引创建 Pandas Dataframe

rxjs - RxJS v5+ 中的 `Observable.transduce` 发生了什么?

ruby-on-rails - 如何在 Ruby 中正确链接自定义方法?

java - 方法链警告

python - 是否可以一次创建多个数据框?

ruby 1.8.7 : intercepting chained methods for object

.net - 构造函数调用其他构造函数: any performance issues?