панды, разделить или разделить (вычесть) фрейм данных - PullRequest
0 голосов
/ 16 октября 2018

У меня есть фрейм данных "moment_f".и я должен удалить несколько строк из moment_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". 

, поэтому теперь я хочу удалить фрейм данных "ah_d" из фрейма данных moment_f.

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

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Вы можете избежать создания «подмножества данных», работая только с с индексами.Это возможно с 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 голосов
/ 16 октября 2018

IIUC нужно:

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