Удалить строки из кадра данных на основе 2 условий - PullRequest
3 голосов
/ 10 мая 2019

У меня есть фрейм данных Python, который содержит данные игрока НХЛ за несколько сезонов.Я пытаюсь удалить все ряды игроков, которые не играли в 2018-2019 годах.Например, если Джо Джонс играл в 2018-2019 годах, я хочу сохранить его данные за этот сезон и за любой другой сезон, в котором он играл.

Я думаю, код будет выглядеть примерно так:

for player in data.players:
      if data['Year'] == '2018-2019':
          save player's name
      else:
          remove player's data

Например, мой фрейм данных выглядит следующим образом

Year         Player     TM     GP
2018-2019    Joe        MTL    78
2017-2018    Joe        MTL    82
2016-2017    Joe        MTL    80
2017-2018    Jim        STL    76
2016-2017    Jim        STL    82
2018-2019    Jack       MIN    82

Результат будет:

Year         Player     TM     GP
2018-2019    Joe        MTL    78
2017-2018    Joe        MTL    82
2016-2017    Joe        MTL    80 
2018-2019    Jack       MIN    82

1 Ответ

5 голосов
/ 10 мая 2019

groupby.filter

df.groupby('Player').filter(lambda d: '2018-2019' in {*d.Year})

        Year Player   TM  GP
0  2018-2019    Joe  MTL  78
1  2017-2018    Joe  MTL  82
2  2016-2017    Joe  MTL  80
5  2018-2019   Jack  MIN  82

То же самое, но использовать массив values вместо set

df.groupby('Player').filter(lambda d: '2018-2019' in d.Year.values)

Переработано с Numpy

m = df.Year.values == '2018-2019'
i, u = pd.factorize(df.Player)
a = np.zeros(len(u), bool)
np.logical_or.at(a, i, m)

df[a[i]]

        Year Player   TM  GP
0  2018-2019    Joe  MTL  78
1  2017-2018    Joe  MTL  82
2  2016-2017    Joe  MTL  80
5  2018-2019   Jack  MIN  82
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...