Python Pandas:使用最后可用的值和标志填充空值
我正在寻找一种逻辑,根据标志Y在值列中生成输出/更新值。请注意粗体的第二个N。我们不会为接下来的两个y填充值,因为最后一个值是N,它是null。如果N有一个值,我们可以填充下一个Y行 我尝试过使用df_latest.loc[(df_latest['flag']='Y'),'value']=df_latest['value'])。fillna(method='ffill') 此逻辑不包括N为null时的场景,它正向填充null行之前的所有行Python Pandas:使用最后可用的值和标志填充空值,python,pandas,dataframe,Python,Pandas,Dataframe,我正在寻找一种逻辑,根据标志Y在值列中生成输出/更新值。请注意粗体的第二个N。我们不会为接下来的两个y填充值,因为最后一个值是N,它是null。如果N有一个值,我们可以填充下一个Y行 我尝试过使用df_latest.loc[(df_latest['flag']='Y'),'value']=df_latest['value'])。fillna(method='ffill') 此逻辑不包括N为null时的场景,它正向填充null行之前的所有行 flag value new_val Y
flag value new_val
Y 1 1
Y 2 2
Y NaN 2
N 3 3
Y NaN 3
Y 5 5
N NaN NaN
Y NaN NaN
Y NaN NaN
N 6 6
Y NaN 6
Y NaN 6
Y NaN 6
Y NaN 6
Y NaN 6
我们可以使用
分组填写,,
因此,每当flag==N
和value
为null时,它将不会被填充,直到值不是null,
要仅在标志为Y
时填充,可以使用注释代码
blocks = (df['flag'].eq('N') & df['value'].isnull()).cumsum()
df['new_val'] = df['value'].groupby(blocks).ffill()
# if you want fill only if flag is Y
#df['new_val'] = df['value'].fillna(df['value'].groupby(blocks)
# .ffill()
# .where(df['flag'].eq('Y'))
# )
print(df)
输出
flag value new_val
0 Y 1.0 1.0
1 Y 2.0 2.0
2 Y NaN 2.0
3 N 3.0 3.0
4 Y NaN 3.0
5 Y 5.0 5.0
6 N NaN NaN
7 Y NaN NaN
8 Y NaN NaN
9 N 6.0 6.0
10 Y NaN 6.0
11 Y NaN 6.0
12 Y NaN 6.0
13 Y NaN 6.0
14 Y NaN 6.0
请将数据发布为textHI Sayandip,我刚刚在帖子中添加了数据。感谢您的帮助。最好至少留下一条关于这是做什么的评论……添加@Tgsmith61591