gpt4 book ai didi

python - 仅允许 pandas 数据框中的两列之间进行一对一映射

转载 作者:行者123 更新时间:2023-12-01 05:13:23 27 4
gpt4 key购买 nike

我有一个两列数据框 df,每一行都是不同的,一列中的一个元素可以映射到另一列中的一个或多个元素。我想过滤掉这些元素。因此,在最终的数据框中,一列中的一个元素仅映射到另一列中的唯一元素。

我正在做的是将一列分组并计算重复项,然后删除计数大于 1 的行,并对另一列再次执行此操作。我想知道是否有更好、更简单的方法。

谢谢

<小时/>

edit1:我刚刚意识到我的解决方案不正确,删除 A 列中的多重映射元素减少了 B 列中的映射数量,请考虑以下示例:

AB

1 4

1 3

2 4

1 映射到 3,4 ,因此应删除前两行,4 映射到 1,2 。决赛 table 应该是空的。但是,我的解决方案将保留最后一行。

任何人都可以为我提供快速而简单的解决方案吗?谢谢

最佳答案

那么,您可以执行以下操作:

>>> df

A B
0 1 4
1 1 3
2 2 4
3 3 5

如果没有其他行具有“A”值并且没有其他行具有“B”值,则您只想保留一行。在本例中,只有第三行满足这些条件:

>>> Aone = df.groupby('A').filter(lambda x: len(x) == 1)
>>> Bone = df.groupby('B').filter(lambda x: len(x) == 1)
>>> Aone.merge(Bone,on=['A','B'],how='inner')

A B
0 3 5

说明:

>>> Aone = df.groupby('A').filter(lambda x: len(x) == 1)
>>> Aone

A B
2 2 4
3 3 5

上面的内容仅根据“A”列的情况获取了可能允许的行。

>>> Bone = df.groupby('B').filter(lambda x: len(x) == 1)
>>> Bone

A B
1 1 3
3 3 5

上面的内容仅根据“B”列的情况获取了可能允许的行。然后合并交集,留下只满足两个条件的行:

>>> Aone.merge(Bone,on=['A','B'],how='inner')

请注意,您还可以使用groupby/transform 执行类似的操作。但转换往往很慢,所以我没有将其作为替代方案。

关于python - 仅允许 pandas 数据框中的两列之间进行一对一映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718154/

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