在pd.Dataframe中选择反索引

Gar*_*vey 5 python indexing dataframe pandas

如何使用loc或在pd.DataFrame中选择反索引iloc

我尝试了df.loc[!my_index,my_feature]但是失败了。

而且df.loc[[ind for ind in df.index.tolist() if ind not in my_index],my_feature]看起来太呆板了。有更好的主意吗?

jez*_*ael 20

使用difference

df.loc[df.index.difference(my_index),my_feature]
Run Code Online (Sandbox Code Playgroud)

或者numpy.setdiff1d

df.loc[np.setdiff1d(df.index, my_index),my_feature]
Run Code Online (Sandbox Code Playgroud)

样品

my_index = [5,7]
df = pd.DataFrame({'A': ['a','a','a','b'], 'B': list(range(4)) }, index=[5,7,8,9])
print (df)
   A  B
5  a  0
7  a  1
8  a  2
9  b  3

print(df.loc[df.index.difference(my_index),'A'])
8    a
9    b
Name: A, dtype: object
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 5

您可以利用index.difference.

idx2 = df.index.difference(my_index)
Run Code Online (Sandbox Code Playgroud)

或者,set.difference

idx2 = set(df.index).difference(my_index) # note, order not guaranteed
Run Code Online (Sandbox Code Playgroud)

df.loc[idx2, ...]
Run Code Online (Sandbox Code Playgroud)


tgo*_*bch 5

假设 my_index 是您想要忽略的行索引,您可以将它们删除在数据帧 df 中存在的位置:

df = df.drop(my_index, errors='ignore')