python - 用先前的值乘以常数填充 nan 值的列
问题描述
我有一个 df,其中一些列以多个 nan 值结尾。我想使用 fillna(method='ffill') 或类似的东西将每个 nan col 值与前一个值 * 来自另一个 df 的某个常量相乘。但是,仅使用以下内容是行不通的。在移动到下一个之前需要计算每个 col 值,这是问题吗?
df_new = df.fillna(method='ffill') * constant
解决方案
有趣的问题!这不是矢量化解决方案,但它可以逐列工作。
首先设置数据以进行测试 - 将索引设置为最新,因此我们不依赖索引号来提供帮助
A = [np.nan, np.nan, 5.5, 5.7, 5.9, 6.1, 6.0, 5.9, np.nan, np.nan, np.nan,15.0]
df = pd.DataFrame({'A': A}, index=pd.date_range(start='2010', periods=len(A), freq="QS"))
给
A
2010-01-01 NaN
2010-04-01 NaN
2010-07-01 5.5
2010-10-01 5.7
2011-01-01 5.9
2011-04-01 6.1
2011-07-01 6.0
2011-10-01 5.9
2012-01-01 NaN
2012-04-01 NaN
2012-07-01 NaN
2012-10-01 15.0
接着
for id in df[df.A.isnull() == True].index:
df.loc[id, 'A'] = 1.025 * df.A.shift().loc[id]
给
A
2010-01-01 NaN
2010-04-01 NaN
2010-07-01 5.500000
2010-10-01 5.700000
2011-01-01 5.900000
2011-04-01 6.100000
2011-07-01 6.000000
2011-10-01 5.900000
2012-01-01 6.047500
2012-04-01 6.198687
2012-07-01 6.353655
2012-10-01 15.000000
现在您需要遍历要向前填充的列
推荐阅读
- docker - 如何在 docker 容器中并行运行多个命令,然后等待它们全部完成?
- ios - 如何以编程方式在 Swift 中将 uiimageview 设置为 xcode 内置的 applewatch 图标图像?
- webpack - Babel-standalone 存在于生产包中
- javascript - 隐藏图例标签时 Chart.js 更新图表?
- orientdb - 有什么方法可以检查哪个线程正在更新/操作 OrientDB 中的 ODocument?
- r - 在 R 中安装包:没有名为“gsl”的包
- node.js - EJS 部署问题,“未定义列表名称”
- sql - 如何在 Postgres 中对包含语义版本的列进行排序
- angular - 将来自 .net-core web api 的 url 与 angular 11 匹配
- javascript - 在无序列表的返回方法中添加条件检查后 CSS 中断