根据pandas中的条件填充NaN值

ubbxdtey  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(107)

我有下面的dataframe:

data = [['1', 'Construction', '', '01/02/2022', '01/06/2022', '1', 'No'], ['N/A', 'Level Site', 'Construction', '01/02/2022', '01/02/2022', '2', 'No'], ['3', 'Foundation', '', '01/03/2023', '01/06/2023', '1', 'Yes'],['2', 'Lay Foundation', 'Construction>Foundation', '01/03/2022', '01/04/2022', '3', 'No'], ['N/A', 'Prepare land for foundation', 'Construction>Foundation', '01/05/2022', '01/06/2022', '3', 'No'],['2', 'Building Envelope', '', '01/07/2023', '01/16/2023', '1', 'No'], ['2', 'Install Footings', 'Building Envelope', '01/07/2022', '01/07/2022', '2', 'Yes'], ['2', 'Pouring', '', '01/08/202', '01/09/2023', '1', 'No'],['N/A', 'Pour Foundation', 'Building Envelope>Pouring', '01/08/2022', '01/09/2022', '3', 'No'], ['2', 'Installation', '', '01/09/2022', '01/14/2022', '1', 'No']]
df1 = pd.DataFrame(data, columns=['Outline_level',  'Activity', 'Parent', 'Start', 'Finish', 'WBS Level', 'Match'])

df1

字符串
我想在“Outline_Level”列中的N/A值中填充其下方单元格中的值减去1。例如,如果单元格持有“N/A”值,而下面的单元格的值为3,我希望N/A单元格的值为2。我尝试过bfill方法,它填充N/A值,但我不知道如何从这些值中减去1。
下面是我理想中的dataframe的一个例子:

Ideal_data = [['1', 'Construction', '', '01/02/2022', '01/06/2022', '1', 'No'], ['2', 'Level Site', 'Construction', '01/02/2022', '01/02/2022', '2', 'No'], ['3', 'Foundation', '', '01/03/2023', '01/06/2023', '1', 'Yes'],['2', 'Lay Foundation', 'Construction>Foundation', '01/03/2022', '01/04/2022', '3', 'No'], ['1', 'Prepare land for foundation', 'Construction>Foundation', '01/05/2022', '01/06/2022', '3', 'No'],['2', 'Building Envelope', '', '01/07/2023', '01/16/2023', '1', 'No'], ['2', 'Install Footings', 'Building Envelope', '01/07/2022', '01/07/2022', '2', 'Yes'], ['2', 'Pouring', '', '01/08/202', '01/09/2023', '1', 'No'],['1', 'Pour Foundation', 'Building Envelope>Pouring', '01/08/2022', '01/09/2022', '3', 'No'], ['2', 'Installation', '', '01/09/2022', '01/14/2022', '1', 'No']]
df2 = pd.DataFrame(Ideal_data, columns=['Outline_level',  'Activity', 'Parent', 'Start', 'Finish', 'WBS Level', 'Match'])

df2


谢谢你的任何帮助

lsmepo6l

lsmepo6l1#

使用pd.Series.shift替换已识别索引上的值并移位值:

idx = df1[df1['Outline_level'].eq('N/A')].index
df1.loc[idx, 'Outline_level'] = df1['Outline_level'].shift(-1).iloc[idx].astype(int) - 1

个字符

相关问题