gpt4 book ai didi

python - Pandas 合并处理连接输出中的重复项

转载 作者:行者123 更新时间:2023-12-01 08:47:28 25 4
gpt4 key购买 nike

有没有一种好的方法可以只带一行,最好是在 Pandas 的左连接过程中一对多匹配中随机?

例如

left = [[1,1,1], [2,2,2],[3,3,3], [9,9,9], [1,3,2]]
right = [[1,2,2],[1,2,3],[3,2,2], [3,2,9], [3,2,2]]
left = np.asarray(left)
right = np.asarray(right)
left = pd.DataFrame(left)
right = pd.DataFrame(right)
joined_left = left.merge(right, how="left", left_on=[0], right_on=[0])

这就是我们得到的

   0  1  2
0 1 1 1
1 2 2 2
2 3 3 3
3 9 9 9
4 1 3 2

0 1 2
0 1 2 2
1 1 2 3
2 3 2 2
3 3 2 9
4 3 2 2

0 1_x 2_x 1_y 2_y
0 1 1 1 2.0 2.0
1 1 1 1 2.0 3.0
2 2 2 2 NaN NaN
3 3 3 3 2.0 2.0
4 3 3 3 2.0 9.0
5 3 3 3 2.0 2.0
6 9 9 9 NaN NaN
7 1 3 2 2.0 2.0
8 1 3 2 2.0 3.0

所以现在我希望输出的大小与左侧数据帧的大小相同,并且当右侧数据帧中有多个匹配项时,我只想引入单个随机列。

有没有一种使用 pandas 快捷技巧的好方法?

谢谢!

最佳答案

您可以在合并之前随机播放 rightdrop_duplicates(...[, keep='first'])

right2 = right.sample(frac=1).drop_duplicates(subset=[0])
left.merge(right2, how='left', left_on=[0], right_on=[0])

0 1_x 2_x 1_y 2_y
0 1 1 1 2.0 2.0
1 2 2 2 NaN NaN
2 3 3 3 2.0 2.0
3 9 9 9 NaN NaN
4 1 3 2 2.0 2.0

我们首先向右洗牌,然后删除除第一行之外的所有重复项(仅考虑第 0 列),这与随机选择一行相同。

关于python - Pandas 合并处理连接输出中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53244793/

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