Python 计算行之间的线性/多项式值
我正在做一个价格表,我正试图找到一种方法,根据不同的列计算线性或多项式。这是我的数据集,我将解释我试图做什么:Python 计算行之间的线性/多项式值,python,pandas,Python,Pandas,我正在做一个价格表,我正试图找到一种方法,根据不同的列计算线性或多项式。这是我的数据集,我将解释我试图做什么: lf seed 2468 5685.05300 0.0 2469 NaN 0.0 2470 NaN 0.0 2471 NaN 0.0 2472 NaN 0.0 2473 NaN 0.0 2474 NaN 0.0 2475
lf seed
2468 5685.05300 0.0
2469 NaN 0.0
2470 NaN 0.0
2471 NaN 0.0
2472 NaN 0.0
2473 NaN 0.0
2474 NaN 0.0
2475 NaN 0.0
2476 5680.89225 0.0
2477 NaN 0.0
2478 NaN 0.0
2479 NaN 0.0
2480 NaN 0.0
2481 5687.35365 0.0
2482 NaN 0.0
2483 NaN 0.0
2484 NaN 0.0
2485 NaN 0.0
2486 5685.15090 0.0
2487 NaN 0.0
2488 NaN 0.0
2489 NaN 0.0
2490 NaN 0.0
2491 5685.10195 0.0
2492 NaN 0.0
2493 NaN 0.0
2494 NaN 0.0
2495 NaN 0.0
2496 NaN 0.0
2497 NaN 0.0
2498 5659.50110 0.0
2499 NaN 0.0
2500 NaN 0.0
2501 NaN 0.0
2502 5653.96975 0.0
2503 NaN 0.0
2504 NaN 0.0
2505 NaN 0.0
例如:我想计算索引2468
和2476
之间的差异,即4.16075
,在这种特殊情况下,将其除以8
,并通过减去计算值填充种子列,因为下一个值低于上一个值。顺便说一句,由于在最后3行中没有设置值,我需要继续最后几点。我的意思是:
2498 5659.50110 0.0
2499 NaN 0.0
2500 NaN 0.0
2501 NaN 0.0
2502 5653.96975 0.0
2503 NaN 0.0
2504 NaN 0.0
2505 NaN 0.0
seed
应继续,直到在lf
有没有一种切实可行的方法,或者我必须创建一个循环函数才能做到这一点
编辑:预期输出
lf seed
2476 5680.89225 5680.892250
2477 NaN 5682.184530
2478 NaN 5683.476810
2479 NaN 5684.769090
2480 NaN 5686.061370
2481 5687.35365 5687.353650
2482 NaN 5686.913100
2483 NaN 5686.472550
2484 NaN 5686.032000
2485 NaN 5685.591450
2486 5685.15090 5685.150900
2487 NaN 5685.141110
2488 NaN 5685.131320
2489 NaN 5685.121530
2490 NaN 5685.111740
2491 5685.10195 5685.101950
2492 NaN 5681.444686
2493 NaN 5677.787421
2494 NaN 5674.130157
2495 NaN 5670.472893
2496 NaN 5666.815629
2497 NaN 5663.158364
2498 5659.50110 5659.501100
2499 NaN 5658.118262
2500 NaN 5656.735425
2501 NaN 5655.352587
2502 5653.96975 5653.969750
2503 NaN 5652.586912
2504 NaN 5651.204075
2505 NaN 5649.821237
除了最后一个值以外的行之外,其他所有内容都是无关紧要的:它只是
df["inside"] = df.lf.interpolate("linear", limit_area="inside")
为了在最后处理外推,我们可以向前填充插值之间的差异,然后获取累积和以返回原始值:
delta = df.lf.interpolate("linear", limit_area="inside").diff().ffill()
df["rebuilt"] = delta.fillna(df.lf).cumsum()
这让我
lf seed inside rebuilt
2476 5680.89225 5680.892250 5680.892250 5680.892250
2477 NaN 5682.184530 5682.184530 5682.184530
2478 NaN 5683.476810 5683.476810 5683.476810
2479 NaN 5684.769090 5684.769090 5684.769090
2480 NaN 5686.061370 5686.061370 5686.061370
2481 5687.35365 5687.353650 5687.353650 5687.353650
2482 NaN 5686.913100 5686.913100 5686.913100
2483 NaN 5686.472550 5686.472550 5686.472550
2484 NaN 5686.032000 5686.032000 5686.032000
2485 NaN 5685.591450 5685.591450 5685.591450
2486 5685.15090 5685.150900 5685.150900 5685.150900
2487 NaN 5685.141110 5685.141110 5685.141110
2488 NaN 5685.131320 5685.131320 5685.131320
2489 NaN 5685.121530 5685.121530 5685.121530
2490 NaN 5685.111740 5685.111740 5685.111740
2491 5685.10195 5685.101950 5685.101950 5685.101950
2492 NaN 5681.444686 5681.444686 5681.444686
2493 NaN 5677.787421 5677.787421 5677.787421
2494 NaN 5674.130157 5674.130157 5674.130157
2495 NaN 5670.472893 5670.472893 5670.472893
2496 NaN 5666.815629 5666.815629 5666.815629
2497 NaN 5663.158364 5663.158364 5663.158364
2498 5659.50110 5659.501100 5659.501100 5659.501100
2499 NaN 5658.118262 5658.118263 5658.118263
2500 NaN 5656.735425 5656.735425 5656.735425
2501 NaN 5655.352587 5655.352588 5655.352588
2502 5653.96975 5653.969750 5653.969750 5653.969750
2503 NaN 5652.586912 NaN 5652.586912
2504 NaN 5651.204075 NaN 5651.204075
2505 NaN 5649.821237 NaN 5649.821237
及
注意:我假设序列顶部没有任何NaN值。如果需要的话,我们也可以处理这些问题。这是一个很好的解决方案。唯一的问题是“重建”在这里不起作用?最后3行是5653.969750df.lf.interpolate(“linear”,limit_area=“inside”),此代码使用my中的最后一个值填充NaN值side@DonCoder:您使用的是旧版本的熊猫吗?如果我使用过时的版本,我可以重现你的问题。我使用的是0.22.0。我已经更新了pandas,现在它工作得很好!非常感谢你。
In [126]: np.allclose(df["rebuilt"], df["seed"])
Out[126]: True