[英]Unordered sets as columns / Python's frozenset object
我正在尝试在 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
无序集合集合 - 见上文。
我认为连接列然后排序可能会起作用,但实际上我的列比单字母单元格要复杂得多, 这篇文章的评论
唔。 “Tim Mott”和“Tom Mitt”不会以姓名形式匹配,但会以排序的字谜形式匹配。 那可能很有趣。
明确表示这不是我想做的。
有关如何在 SAS 中复制此内容的任何提示?
编辑:最终,这是我要创建的视图,基本上是按该无序键计算记录:
>>> df.groupby('key').size()
key
(a, c) 2
(b) 1
dtype: int64
如果你只看两个变量,那很简单。 只需先将它们与较小的值结合起来。
data have ;
input (var1-var2) ($);
cards;
a c
b b
c a
;
proc sql ;
create table want as
select
case when var1=var2 then var1
when var1<var2 then catx(',',var1,var2)
else catx(',',var2,var1)
end as key
, count(*) as size
from have
group by 1
;
quit;
结果:
Obs key size
1 a,c 2
2 b 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.