gpt4 book ai didi

python - 维护重复元素和非重复元素之间的关系

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:55 25 4
gpt4 key购买 nike

让我们假设我有一个像这样的数据框:

+------------+
| ColA |
+------------+
| 1234567890 |
| 1234509870 |
| 1234589670 |
| 1234576890 |
| 3456789000 |
| 3456787970 |
+------------+

要求:所有与前5个字符完全匹配的元素都应该被视为1,并且只有单个元素应该被标记为不重复,其他元素被选中的元素在另一列中。

我已经能够通过使用以下步骤在另一列中分离出前 5 个元素来找出什么是重复元素:

df['ColA_5'] = df['ColA'].str[:5]

然后标记重复项

df['Colc'] = df.duplicated(subset=['colA_5'],
keep='first').map({True:'non-dup', False:'dup'})

因此,我如何使用上面的数据框创建下面提到的数据框。

+----------------------------+
| ColA ColB |
+----------------------------+
| 1234567890 non-duplicate |
| 1234509870 1234567890 |
| 1234589670 1234567890 |
| 1234576890 1234567890 |
| 3456789000 non-duplicate |
| 3456787970 3456789000 |
+----------------------------+

最佳答案

您可以使用 transform('first') 将每个组中的所有第一个值广播回它们的位置,然后只需屏蔽实际的第一个值即可获得非重复标志

g = df.groupby(df.ColA.astype(str).str[:5])
df['ColB'] = g.transform('first')\
.ColA.astype(str)\
.mask(df.index.isin(g.head(1).index),
'non-duplicate')

         ColA           ColB
0 1234567890 non-duplicate
1 1234509870 1234567890
2 1234589670 1234567890
3 1234576890 1234567890
4 3456789000 non-duplicate
5 3456787970 3456789000

关于python - 维护重复元素和非重复元素之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57726948/

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