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是什么?你能再解释一下你想做什么吗。退出日期是什么?简化了问题。希望这足够清晰,能够修改并满足我的需求。谢谢你!