Python 如何根据另一列的条件转发数据帧中的空值?
我想根据下面数据框“test”中的2个条件转发fill null值Python 如何根据另一列的条件转发数据帧中的空值?,python,pandas,dataframe,Python,Pandas,Dataframe,我想根据下面数据框“test”中的2个条件转发fill null值 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
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
案例1
用于向前填充
对于所有同名列的记录,应采用最多2条记录的正向填写
如果当前记录的间隙为0且状态为y,后续记录的间隙为1
案例2:
如果当前记录的间隙为0且状态为y,后续记录的间隙为0,则不应对空值应用正向填充
下面是我的代码逻辑
if [(test['Status'] == 'Y') & (test['Gap'] == 0) & (test['Gap'].shift(1) == 1)]:
test1 = test.fillna(method = 'ffill', limit =2)
这里,我的代码没有检查第三个条件(其中后续记录的gap=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
它与SQL Server的关系如何?顺便说一句,代码是有效的,你只是希望得到不同的结果。这个问题有什么线索吗?你正确地排除了SQL Server标记,这可能会有所帮助。