gpt4 book ai didi

python - Pandas:用前一个和下一个非缺失值的平均值动态替换 NaN 值

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:21 34 4
gpt4 key购买 nike

我有一个包含 NaN 值的数据框 df,我想用前一个和下一个非缺失值的平均值动态替换它们。

In [27]: df 
Out[27]:
A B C
0 -0.166919 0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 NaN -2.027325 1.533582
4 NaN NaN 0.461821
5 -0.788073 NaN NaN
6 -0.916080 -0.612343 NaN
7 -0.887858 1.033826 NaN
8 1.948430 1.025011 -2.982224
9 0.019698 -0.795876 -0.046431

例如,A[3]NaN 所以它的值应该是 (-0.120211-0.788073)/2 = -0.454142。 A[4] 那么应该是 (-0.454142-0.788073)/2 = -0.621108。

因此,结果数据框应如下所示:

In [27]: df 
Out[27]:
A B C
0 -0.166919 0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 -0.454142 -2.027325 1.533582
4 -0.621108 -1.319834 0.461821
5 -0.788073 -0.966089 -1.260202
6 -0.916080 -0.612343 -2.121213
7 -0.887858 1.033826 -2.551718
8 1.948430 1.025011 -2.982224
9 0.019698 -0.795876 -0.046431

这是处理缺失值的好方法吗?我不能简单地 replace them by the average values of each column因为我的数据是时间序列的,并且会随着时间的推移而增加。 (初始值可能为 0 美元,最终值可能为 100000 美元,因此平均值为 50000 美元,这可能比 NaN 值大得多/小得多)。

最佳答案

你可以试着理解你的平均数背后的逻辑是几何级数

s=df.isnull().cumsum()
t1=df[(s==1).shift(-1).fillna(False)].stack().reset_index(level=0,drop=True)
t2=df.lookup(s.idxmax()+1,s.idxmax().index)
df.fillna(t1/(2**s)+t2*(1-0.5**s)*2/2)
Out[212]:
A B C
0 -0.166919 0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 -0.454142 -2.027325 1.533582
4 -0.621107 -1.319834 0.461821
5 -0.788073 -0.966089 -1.260201
6 -0.916080 -0.612343 -2.121213
7 -0.887858 1.033826 -2.551718
8 1.948430 1.025011 -2.982224
9 0.019698 -0.795876 -0.046431

解释:

1st NaN x/2+y/2=1st

第二个NaN 1st/2+y/2=2

3rd NaN 2nd/2+y/2+3rd

然后x/(2**n)+y(1-(1/2)**n)/(1-1/2),这是关键

关于python - Pandas:用前一个和下一个非缺失值的平均值动态替换 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51559529/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com