gpt4 book ai didi

python - 识别 Pandas 数据框中的重复项

转载 作者:行者123 更新时间:2023-11-28 22:31:53 25 4
gpt4 key购买 nike

我有以下数据框“matches_df”,使用 python 2.7:

name | opponent | date     | win
'Bob' 'Bill' 7/12/16 Y
'Mike' 'Matt' 4/15/18 N
'Tim' 'Tom' 1/1/11 N
'Bill' 'Bob' 7/12/16 N

我想要一个不包含重复游戏的列表。这些比赛有相同的两名球员(不一定在同一列)并且发生在同一天。在上面的示例中,游戏 1 和 4 是重复的。

为了解决这个问题,我尝试创建第 4 列 game_id,它创建前 3 列的排序组合。例如,我想要这个结果:

name | opponent | date    | win | game_id
'Bob' 'Bill' 7/12/16 Y '7/12/16 Bill Bob'
'Mike' 'Matt' 4/15/18 N '4/15/18 Matt Mike'
'Tim' 'Tom' 1/1/11 N '1/1/11 Tim Tom'
'Bill' 'Bob' 7/12/16 N '7/12/16 Bill Bob'

我使用了以下代码:

def sort_and_squash(a,b,c):
return ''.join(sorted([str(a),str(b),str(c)]))
matches_df = matches_df.assign(game_id = lambda x: sort_and_squash(x.name,x.opponent,x.date))

但是,这没有按预期工作,在数据框中创建了一个空白列。

我正在寻求帮助,以查找中间步骤代码中的错误或推荐替代方法。

最佳答案

['name', 'opponent'] 列中对玩家进行排序
如果它们相同但位置不同,则排序会将它们放在相同的位置。

game_id_df = df[['date']].join(df[['name', 'opponent']].apply(sorted, 1))
print(game_id_df)

date name opponent
0 7/12/16 Bill Bob
1 4/15/18 Matt Mike
2 1/1/11 Tim Tom
3 7/12/16 Bill Bob

然后加入字符串并添加列

df['game_id'] = game_id_df.apply(tuple, 1).str.join(' ')
print(df)

name opponent date win game_id
0 Bob Bill 7/12/16 Y 7/12/16 Bill Bob
1 Mike Matt 4/15/18 N 4/15/18 Matt Mike
2 Tim Tom 1/1/11 N 1/1/11 Tim Tom
3 Bill Bob 7/12/16 N 7/12/16 Bill Bob

现在您可以使用game_id 来删除重复

print(df.drop_duplicates(subset=['game_id']))

name opponent date win game_id
0 Bob Bill 7/12/16 Y 7/12/16 Bill Bob
1 Mike Matt 4/15/18 N 4/15/18 Matt Mike
2 Tim Tom 1/1/11 N 1/1/11 Tim Tom

关于python - 识别 Pandas 数据框中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41385795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com