【发布时间】:2022-01-26 17:29:11
【问题描述】:
假设我们在(目标)之前和之后有以下数据框。我想确保没有两个列值在一起(如果它们具有来自数据框中Label 列的相同标签值)。下面是 4 行的示例,其中 (1, 10) 在一起,因为它们具有相同的标签,但我想要相反的情况,即 Column 1 和 Column 2 不能具有相同的标签,因此 1 可以与 @ 987654329@ 或 13 和其他人一样。
此外,基于Label 1 值,来自column 1 的相同值不能与来自column 2 的多个不同项目配对,所以我假设我们在操作后得到(1,11) 而不是@987654335 @ 和 (1,13) 行。
我的方法如下。我使用groupby('Label')cumcount() 添加另一列来解决第一个问题,即有两个匹配(1, 11) 和(1,13),例如我只能有一个(1, 11),但我不知道如何做另一个,即匹配具有不同 Label 值的行以及最多匹配一次的约束。
示例
import pandas as pd
df1 = pd.DataFrame(
{
'Column1': [1,2,3,4],
'Column2':[10,11,12,13],
'Label':['apple', 'orange', 'apple', 'orange']
}
)
target = pd.DataFrame(
{
'Column1': [1,2,3,4],
'Column2':[11,10,13,12],
'Label':['apple', 'orange', 'apple', 'orange']
}
)
【问题讨论】:
-
我在遵循您的逻辑时遇到了一些麻烦。
(1, 13)也可以是第一行吗? -
@DerekO。是的,德里克。这是可能的,但我只是在
col 1和col 2列之间寻找一个匹配,这样它们的标签就不同了,这就足够了。所以我们 cab 只有(1, 13)或(1, 11),但在目标数据帧中没有浴。我认为cumcount可能会解决(1, 13)或(1, 11)的第一个问题。 -
这个问题/答案对您有帮助吗:stackoverflow.com/questions/69518646/…
-
@保罗。谢谢你。这也是我的问题,但它是不同的,因为它应该匹配两列中的行,这样我们就可以避免重复,并且我们根据具有共同值的共享列来匹配行。在这里,我想通过匹配
Label不同的行来做相反的事情,这样我最多只有一个匹配。