【发布时间】:2019-10-18 12:58:58
【问题描述】:
我正在尝试在 SAS 中复制以下模式(以 Python 显示):
>>> df = pd.DataFrame({'a': list('abc'), 'b': list('cba')})
>>> df
a b
0 a c
1 b b
2 c a
>>> df['key'] = [frozenset([x, y]) for x, y in df[['a', 'b']].values]
>>> df
a b key
0 a c (a, c)
1 b b (b)
2 c a (a, c)
>>> df.drop_duplicates('key')
a b key
0 a c (a, c)
1 b b (b)
实际上,我有两列,a 和 b。该表是通过自连接生成的,a 和 b 代表相同的规范列。我需要在合并/连接的a 和b 列上删除重复项而不保留这些列中值的顺序。我可以在 Python 中使用 frozenset 无序集合非常轻松地做到这一点 - 见上文。
我认为连接列然后排序可能会起作用,但实际上我的列比单字母单元格和来自this 文章的评论要复杂得多
嗯。 “Tim Mott”和“Tom Mitt”不会以姓名形式匹配,但会以排序的字谜形式匹配。这可能很有趣。
明确表示这不是我想要做的。
关于如何在 SAS 中复制这一点的任何提示?
编辑:最终,这是我要创建的视图,基本上是按该无序键计算记录:
>>> df.groupby('key').size()
key
(a, c) 2
(b) 1
dtype: int64
【问题讨论】: