Вы можете избежать создания «подмножества данных», работая только с с индексами.Это возможно с iloc
, но не тривиально.Важно отметить, что приведенное ниже решение работает только с целочисленным позиционным расположением, а не с индексными метками, т. Е. Оно не принимает уникальные индексы.
import numpy as np
# some example dataframe
df = pd.DataFrame({'A': [1, 2, 3, 1, 1, 2, 1, 1, 1, 3]})
# extract indices to remove
idx = np.where(df['A'] == 1)[0][::2] # array([0, 4, 7], dtype=int64)
# include all indices which do not match idx
res = df.iloc[~np.in1d(np.arange(df['A'].shape[0]), idx)]
print(res)
A
1 2
2 3
3 1
5 2
6 1
8 1
9 3
Если ваш индекс обычный pd.RangeIndex
, то есть 0, 1, ..., n
, вы можетепо ярлыку: pd.DataFrame.drop
:
res = df.drop(idx, axis='rows')