Ada*_*dam 7 python dataframe pandas
我有一个 Pandas 数据框,如下所示:
df =
open high low close
Timestamp
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753
2014-01-07 13:19:00 NaN NaN NaN NaN
2014-01-07 13:20:00 NaN NaN NaN NaN
2014-01-07 13:21:00 883.23085 883.23085 874.48165 874.48165
2014-01-07 13:22:00 NaN NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)
对于每个 NaN,它们应该取前一周期的收盘值。
编辑:我尝试过使用 df.fillna(method='ffill') 但它使每个 NaN 直接在其上方取值。我希望每个 NaN 只取其之前的 Close 值。
使用填充产量:
open high low close
Timestamp
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753
2014-01-07 13:19:00 874.67040 892.06753 874.67040 892.06753
Run Code Online (Sandbox Code Playgroud)
但我正在寻找:
open high low close
Timestamp
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753
2014-01-07 13:19:00 892.06753 892.06753 892.06753 892.06753
Run Code Online (Sandbox Code Playgroud)
有几种方法:
In [3166]: df.apply(lambda x: x.fillna(df.close.shift())).ffill()
Out[3166]:
open high low close
Timestamp
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753
2014-01-07 13:19:00 892.06753 892.06753 892.06753 892.06753
2014-01-07 13:20:00 892.06753 892.06753 892.06753 892.06753
2014-01-07 13:21:00 883.23085 883.23085 874.48165 874.48165
2014-01-07 13:22:00 874.48165 874.48165 874.48165 874.48165
Run Code Online (Sandbox Code Playgroud)
In [3167]: df.fillna({c: df.close.shift() for c in df}).ffill()
Out[3167]:
open high low close
Timestamp
2014-01-07 13:18:00 874.67040 892.06753 874.67040 892.06753
2014-01-07 13:19:00 892.06753 892.06753 892.06753 892.06753
2014-01-07 13:20:00 892.06753 892.06753 892.06753 892.06753
2014-01-07 13:21:00 883.23085 883.23085 874.48165 874.48165
2014-01-07 13:22:00 874.48165 874.48165 874.48165 874.48165
Run Code Online (Sandbox Code Playgroud)