在df-python中的特定值后插入nan

在df-python中的特定值后插入nan,python,pandas,Python,Pandas,我试图在df中的特定值之后将nan插入到列中。使用下面的Item==Orange,我希望用nan替换'Val1','Val2'中的后续行 df = pd.DataFrame({ 'Time' : [1,1,1,2,2,2,3,3,3,4,4,4], 'Group' : ['A','B','A','A','B','A','A','B','A','A','B','A'], 'Item' : ['Red','Blue','Orange','Red','

我试图在df中的特定值之后将nan插入到列中。使用下面的
Item==Orange
,我希望用nan替换
'Val1','Val2'
中的后续行

df = pd.DataFrame({      
    'Time' : [1,1,1,2,2,2,3,3,3,4,4,4],    
    'Group' : ['A','B','A','A','B','A','A','B','A','A','B','A'],   
    'Item' : ['Red','Blue','Orange','Red','Blue','Orange','Red','Blue','Orange','Red','Blue','Orange'],
    'Val1' : [-2.0,-1.0,-1.0,0.0,0.0,1.0,0.0,1.0,2.0,-1.0,0.0,0.0],
    'Val2' : [-2.0,-1.0,-2.0,-1.0,-2.0,-1.0,0.0,1.0,3.0,-2.0,-1.0,-2.0],              
   })

df.loc[df['Item'].isin(['Orange']), ['Val1','Val2']].shift(1) = np.nan
通过以上尝试,我得到了一个SyntaxError:

File "<ipython-input-11-c3d6ab463712>", line 11
    df.loc[df['Item'].isin(['Orange']), ['Val1','Val2']].shift(1) = np.nan
                                                                          ^
SyntaxError: can't assign to function call
哦,你太近了

您需要重新安排一些内容,并确保布尔掩码中没有任何NAN:

df.loc[df['Item'].isin(['Orange']).shift(1).fillna(False),['Val1','Val2']=np.nan
    Time Group    Item  Val1  Val2
0      1     A     Red  -2.0  -2.0
1      1     B    Blue  -1.0  -1.0
2      1     A  Orange  -1.0  -2.0
3      2     A     Red   NaN   NaN
4      2     B    Blue   0.0  -2.0
5      2     A  Orange   1.0  -1.0
6      3     A     Red   NaN   NaN
7      3     B    Blue   1.0   1.0
8      3     A  Orange   2.0   3.0
9      4     A     Red  NaN    NaN
10     4     B    Blue   0.0  -1.0
11     4     A  Orange   0.0  -2.0