Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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 Pandas:使用最后可用的值和标志填充空值_Python_Pandas_Dataframe - Fatal编程技术网

Python Pandas:使用最后可用的值和标志填充空值

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

我正在寻找一种逻辑,根据标志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           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