Python Pandas-如何从最近的行添加值,然后停止搜索

Python Pandas-如何从最近的行添加值,然后停止搜索,python,pandas,Python,Pandas,如果我有以下几点 ValA ValB ValC 8 xxxx NaN 7 xxxx NaN 6 xxxx 1 5 xxxx NaN 4 xxxx NaN 3 xxxx 1 2 xxxx NaN 1 xxxx NaN 输出目标 ValA ValB ValC ValD 8 xxxx NaN 20 7 xxxx NaN 20 6 xxxx 1 20 5

如果我有以下几点

ValA ValB  ValC 
8    xxxx  NaN  
7    xxxx  NaN  
6    xxxx  1   
5    xxxx  NaN   
4    xxxx  NaN  
3    xxxx  1    
2    xxxx  NaN   
1    xxxx  NaN  
输出目标

ValA ValB  ValC ValD
8    xxxx  NaN  20
7    xxxx  NaN  20
6    xxxx  1    20
5    xxxx  NaN  6 
4    xxxx  NaN  6
3    xxxx  1    6
2    xxxx  NaN  3 
1    xxxx  NaN  3

我可以在初始数据帧上运行什么来将其设置为从后面的行获得的特定值,或者设置为20。在我的示例中,当ValC=1在ValD中使用ValA时,该值将是满足特定条件的最近行的值。如果在ValC中找不到1,在行数用完之前,只需使用值20即可。

您想做什么还不是很清楚,但下面的代码将满足您在示例中描述的要求:

In []: df
Out[]:
   ValA  ValB  ValC
0     8  xxxx   NaN
1     7  xxxx   NaN
2     6  xxxx   1.0
3     5  xxxx   NaN
4     4  xxxx   NaN
5     3  xxxx   1.0
6     2  xxxx   NaN
7     1  xxxx   NaN

In []: df['ValD'] = pd.np.where(df.shift(1).ValC == 1,  # Where upper row == 1
                                df.shift(1).ValA,       # Assign upper row's ValA
                                pd.np.nan)              # Else np.nan

In []: df.ValD = (df.ValD.ffill()                       # Propagate ValD values forward
                    .fillna(20))                        # Fill remaining with 20

In []: df
Out[]:
   ValA  ValB  ValC  ValD
0     8  xxxx  20.0  20.0
1     7  xxxx  20.0  20.0
2     6  xxxx   1.0  20.0
3     5  xxxx   1.0   6.0
4     4  xxxx   1.0   6.0
5     3  xxxx   1.0   6.0
6     2  xxxx   1.0   3.0
7     1  xxxx   1.0   3.0

不清楚你在问什么。例3、例2和例1是什么?你能再解释一下你想做什么吗。退出日期是什么?简化了问题。希望这足够清晰,能够修改并满足我的需求。谢谢你!