带否定的 Pandas 数据框 iloc

She*_*hew 1 python indexing pandas

我想将一列对应的行的值设置为特定值。我只知道不应该设置为该值的行的索引。是否有内置技巧可以使用 iloc 执行此操作?

有没有类似的东西

df['I'].iloc[~rids] = 0

当然,一种方法是使用类似的方法

set(range(len(df))).difference(rids)

但看起来不太好看。有什么建议吗?

jez*_*ael 7

DataFrame.locIndex.difference索引实际索引值 和 一起使用Index.difference

df = pd.DataFrame({'I' : ['A','B','C','D']}, index=list('abcd'))

indices = [0,3,1]

df.loc[df.index.difference(df.index[indices]), 'I'] = 0
Run Code Online (Sandbox Code Playgroud)

或者与Index.isin

df.loc[~df.index.isin(df.index[indices]), 'I'] = 0
Run Code Online (Sandbox Code Playgroud)

带位置 和 的解决方案DataFrame.iloc也是可能的:

df.iloc[np.setdiff1d(np.arange(len(df)), indices), df.columns.get_loc('I')] = 0
Run Code Online (Sandbox Code Playgroud)
print (df)
   I
a  A
b  B
c  0
d  D
Run Code Online (Sandbox Code Playgroud)