在pd.Dataframe中选择逆向索引。

18

如何使用locilocpd.DataFrame中选择反向索引?

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

df.loc[[ind for ind in df.index.tolist() if ind not in my_index],my_feature]看起来太枯燥了。 有更好的想法吗?

3个回答

31

使用difference函数:

df.loc[df.index.difference(my_index),my_feature]

或者使用numpy.setdiff1d

df.loc[np.setdiff1d(df.index, my_index),my_feature]

示例:

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

5
您可以利用index.difference
idx2 = df.index.difference(my_index)

或者,set.difference
idx2 = set(df.index).difference(my_index) # note, order not guaranteed

df.loc[idx2, ...]

所以,对于两个数据框来说,只需使用df.loc[df.index.difference(df_not.index)]即可。 - Ufos

5
假设 my_index 是您想要忽略的行索引,您可以在数据框 df 中删除这些行:
```python df = df.drop(my_index, errors='ignore') ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接