Как получить только первый элемент соответствующих элементов из Dataframe, не проходя через него? - PullRequest
0 голосов
/ 15 апреля 2019

Предположим, у меня есть такой фрейм данных:

   Var0  Var1
0    11    22      <--------- Get 1st element of matching
1    11    84
2     8    36      <--------- Get 1st element of matching
3     8     8
4     8    10
5     6    12      <--------- Get 1st element of matching

Я хочу получить такой результат:

   Var0  Var1
0    11    22
2     8    36
5     6    12

Сначала я сортирую свой фрейм данных по sort_values():

df.sort_values(['Var0'], ascending=['False'])

Я думаю, что я предполагаю использовать set, но не уверен, где это сделать. Я не хочу выполнять итерации по данным из-за скорости.

Ответы [ 4 ]

3 голосов
/ 15 апреля 2019

Использовать дубликаты:

df[~df['Var0'].duplicated()]

print(df)

  Var0  Var1
0    11    22
2     8    36
5     6    12
1 голос
/ 15 апреля 2019

Это просто drop_duplicates

df.drop_duplicates('Var0')
Out[230]: 
   Var0  Var1
0    11    22
2     8    36
5     6    12
1 голос
/ 15 апреля 2019

Мы также можем groupby методом .head:

df = df.groupby('Var0', sort=False, as_index=False).head(1)

print(df)
   Var0  Var1
0    11    22
1     8    36
2     6    12
0 голосов
/ 15 апреля 2019

Другой способ - использовать pd.Series.searchsorted (или numpy.searchsorted).

import numpy as np
import pandas as pd

data = pd.DataFrame({'x': [1, 1, 1, 3, 3, 4, 5]})
values = [1, 3, 4, 5]  # we want to find first occurrence indices for these values

common_values = np.intersect1d(data.x.values, values)
print(common_values) # get common values 

print(data.x.searchsorted(common_values))

print(data.loc[data.x.searchsorted(common_values)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...