панды, разделить или разделить (вычесть) фрейм данных

1

У меня есть dataframe "moment_f". и мне нужно удалить несколько строк из момента_f, который содержит имя "AH". Однако я не буду удалять все строки "AH", поэтому я создал новую фреймворк данных, содержащий "AH", которую я хочу удалить.

ah1 = moment_f[moment_f["TextGridLabel"] == "AH"]
ah_d = ah1.iloc[::2] 
# got the odd rows of "AH" which is what I need to get rid of from the original dataframe "moment_f". 

поэтому теперь я хочу удалить dataframe "ah_d" из dataframe "moment_f".

Что было бы противоположностью конкатенации? Я пробовал drop, split и т.д., Но это не работает.

Теги:
pandas
indexing
split
divide

2 ответа

0

Вы можете избежать создания "подмножества данных", работая только с индексами. Это возможно с помощью 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')
0

IIUC:

df = moment_f[~moment_f.index.isin(ah_d.index)]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню