我有一个 python 数据框,其中包含来自多个赛季的 NHL Player 数据。我正在尝试删除 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
最佳答案
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
关于python - 基于 2 个条件从数据框中删除行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56083369/