Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据python中的条件用前一行替换行中的值?_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

如何根据python中的条件用前一行替换行中的值?

如何根据python中的条件用前一行替换行中的值?,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个数据表: Index Value 0 NaN 1 1.15 2 2.25 3 2.33 条件:首先检查上一行值不为NaN的位置,然后用上一行值替换当前行值 期望输出: Index Value 0 NaN 1 1.15 2 1.15 3 1.15 比较缺失值的值,然后获取第一个连续值并替换另一个,向前填充缺失值,最后替换原始缺失值: df = pd.DataFrame({'Value':[n

我有一个数据表:

Index Value

0      NaN

1      1.15

2      2.25

3      2.33
条件:首先检查上一行值不为NaN的位置,然后用上一行值替换当前行值

期望输出:

Index Value

0      NaN

1      1.15

2      1.15

3      1.15

比较缺失值的值,然后获取第一个连续值并替换另一个,向前填充缺失值,最后替换原始缺失值:

df = pd.DataFrame({'Value':[np.nan,1.15,2.15,3.15,np.nan,2.1,2.2,2.3]})

m = df.notna()
df1 = df.where(m.ne(m.shift())).ffill().where(m)

print (df1)
   Value
0    NaN
1   1.15
2   1.15
3   1.15
4    NaN
5   2.10
6   2.10
7   2.10
详细信息

print (m.ne(m.shift()))
  Value
0   True
1   True
2  False
3  False
4   True
5   True
6  False
7  False

print (df.where(m.ne(m.shift())))
 Value
0    NaN
1   1.15
2    NaN
3    NaN
4    NaN
5   2.10
6    NaN
7    NaN

print (df.where(m.ne(m.shift())).ffill())
   Value
0    NaN
1   1.15
2   1.15
3   1.15
4   1.15
5   2.10
6   2.10
7   2.10

纯代码编写请求与堆栈溢出无关-我们希望这里的问题与特定的编程问题相关-但我们很乐意帮助您自己编写!告诉我们,你被困在哪里了。这也将帮助我们更好地回答您的问题。当
df
pd.DataFrame({'Value':[np.nan,1.15,2.15,3.15,np.nan,2.1,2.2,2.3]}
时,预期的输出是
nan 1.15 1.15 1.15 nan 2.1 2.1
,但这会给出
nan 1.15 1.15 1.15 1.15…
全部1。15@jezrael谢谢如果你能解释一下,那也太好了。@jezrael最酷的回答+1 ;)@jezrael还有一个问题,我有一个dataframe pd.dataframe({“值:[np.nan,1,5,np.nan,6,-1,5,np.nan,6]}),这里的逻辑应该在每-1之后重置,所以期望的输出是nan 1.51.56-15