Какой самый умный способ получить остальную часть панды. DataFrame? - PullRequest
0 голосов
/ 24 июня 2018

Вот это pandas.DataFrame df.

| Foo | Bar |
|-----|-----|
|   0 | A   |
|   1 | B   |
|   2 | C   |
|   3 | D   |
|   4 | E   |

Я выбрал несколько строк и определил новый фрейм данных, df1 = df.iloc[[1,3],:].

| Foo | Bar |
|-----|-----|
|   1 | B   |
|   3 | D   |

Что лучшеспособ получить остаток df, как показано ниже.

| Foo | Bar |
|-----|-----|
|   0 | A   |
|   2 | C   |
|   4 | E   |

Ответы [ 3 ]

0 голосов
/ 24 июня 2018

Быстрое дифференцирование на основе набора.

df2 = df.loc[df.index.difference(df1.index)]
df2

   Foo Bar
0    0   A
2    2   C
4    4   E

Работает, пока ваши index значения являются уникальными.

0 голосов
/ 24 июня 2018

Если я правильно понимаю, вы хотите взять фрейм данных, выбрать из него несколько строк и сохранить их в переменной df2, а затем выбрать в df строки, которых нет в df2.

В этом случае вы можете сделать df[~df.isin(df2)].dropna().

  • df[ x ] для подмножества кадра данных df на основе условия x
  • ~df.isin(df2)является отрицанием df.isin(df2), которое оценивается как True для строк df, принадлежащих df2.
  • .dropna() отбрасывает строки со значением NaN.В этом случае строки, которые нам не нужны, были приведены к NaN в выражении фильтрации выше, поэтому мы избавляемся от них.
0 голосов
/ 24 июня 2018

Я предполагаю, что Foo можно рассматривать как уникальный индекс.

Сначала выберите Foo значения из df1:

idx = df1['Foo'].values

Затем отфильтруйте исходный кадр данных:

df2 = df[~df['Foo'].isin(idx)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...