[英]pandas remove rows from dataframe based on multiple conditions without for loops
[英]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)
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.