我想根据以下数据框“测试”中的2个条件来向前填充空值。
Name Date A B C D Status Gap
abv 7/7/2018 61 1.83 87 33 Y 0
abv 7/8/2018 NULL NULL NULL NULL NULL 1
abv 7/9/2018 NULL NULL NULL NULL NULL 1
abv 7/10/2018 NULL NULL NULL NULL NULL 1
abv 7/11/2018 NULL 4.19 NULL NULL NULL 0
dfg 8/12/2018 42 4.16 151 82 Y 0
dfg 8/13/2018 56 NULL NULL 45 NULL 0
dfg 8/14/2018 NULL NULL NULL NULL NULL 1
dfg 8/15/2018 NULL NULL NULL NULL NULL 1
dfg 8/16/2018 NULL NULL NULL NULL NULL 1
dfg 8/17/2018 NULL NULL NULL NULL NULL 1
dfg 8/18/2018 NULL NULL NULL NULL NULL 1
dfg 8/19/2018 38 2.98 15 85 Y 0
dfg 8/20/2018 NULL NULL NULL NULL NULL 1
dfg 8/21/2018 NULL NULL NULL NULL NULL 1
kjl 10/23/2018 NULL 0 72 NULL N 0
kjl 10/24/2018 NULL NULL NULL NULL NULL 1
kjl 10/28/2018 NULL NULL NULL NULL NULL 1
kjl 10/29/2018 54 4.74 212 75 N 0
case1
用于向前填充
对于同一“名称”列的所有记录,应应用前向填充(最多2条记录) 如果间隙= 0,状态= y,当前记录,间隙= 1,后续记录。
案例2: 对于当前记录,如果gap = 0且状态= y,后续记录的gap = 0,则不应该将空填充应用于空值。
下面是我的代码逻辑。
if [(test['Status'] == 'Y') & (test['Gap'] == 0) & (test['Gap'].shift(1) == 1)]:
test1 = test.fillna(method = 'ffill', limit =2)
在这里,我的代码没有检查第三个条件(随后的记录的间隙为0)并继续向前填充,从而违反了case2条件。
这是预期的输出:
Name Date A B C D Status Gap
abv 7/7/2018 61 1.83 87 33 Y 0
abv 7/8/2018 61 1.83 87 33 Y 1
abv 7/9/2018 61 1.83 87 33 Y 1
abv 7/10/2018 NULL NULL NULL NULL NULL 1
abv 7/11/2018 NULL 4.19 NULL NULL NULL 0
dfg 8/12/2018 42 4.16 151 82 Y 0
dfg 8/13/2018 56 NULL NULL 45 NULL 0
dfg 8/14/2018 NULL NULL NULL NULL NULL 1
dfg 8/15/2018 NULL NULL NULL NULL NULL 1
dfg 8/16/2018 NULL NULL NULL NULL NULL 1
dfg 8/17/2018 NULL NULL NULL NULL NULL 1
dfg 8/18/2018 NULL NULL NULL NULL NULL 1
dfg 8/19/2018 38 2.98 15 85 Y 0
dfg 8/20/2018 38 2.98 15 85 Y 1
dfg 8/21/2018 38 2.98 15 85 Y 1
kjl 10/23/2018 NULL 0 72 NULL N 0
kjl 10/24/2018 NULL NULL NULL NULL NULL 1
kjl 10/25/2018 NULL NULL NULL NULL NULL 1
kjl 10/26/2018 NULL NULL NULL NULL NULL 1
kjl 10/27/2018 NULL NULL NULL NULL NULL 1
kjl 10/28/2018 NULL NULL NULL NULL NULL 1
kjl 10/29/2018 54 4.74 212 75 N 0