繁体   English   中英

根据2个条件从Dataframe中删除行

[英]Remove Rows from Dataframe Based on 2 Conditions

我有一个python数据框,其中包含来自多个季节的NHL Player数据。 我正在尝试删除2018-2019期间没有玩过的所有玩家。 例如,如果Joe Jones在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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM