熊猫 - 如何从最近一行添加值,然后停止搜索

2024-09-29 02:23:55 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有以下信息

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。你知道吗


Tags: 数据信息示例目标nanxxxx特定条件vala
1条回答
网友
1楼 · 发布于 2024-09-29 02:23:55

您想做什么还不是很清楚,但下面的代码将符合您在示例中描述的内容:

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

相关问题 更多 >