(Python/熊猫) 我正在对英国房价数据做一些分析,看房价是否与附近学校的质量有关。我已将最近三所学校的URN(唯一参考号)与每笔房价交易进行了匹配。数据中的URN\ 1、URN\ 2、URN\ 3列
我想在数据上估计一个固定效应模型,其中固定效应基于最近的三所学校。因此,我想为三所学校的每个集群创建一个唯一的ID,并且我希望这不受学校顺序的影响。房产A和房产B应该有相同的ID,尽管学校的顺序不同
Property URN_1 URN_2 URN_3
A 100053 100052 100054
B 100052 100054 100053
有人知道我如何使用Python创建唯一的集群id吗
我尝试使用.groupby()用下面的代码创建ID,但是当学校的顺序不同时,这会给出不同的集群ID
以下是我尝试过的:
import pandas as pd
URN1=[1,2,3,4,5]
URN2=[5,4,3,2,1]
URN3=[1,2,3,2,1]
lst=['a','b','c','d','e']
df=pd.DataFrame(list(zip(URN1,URN2,URN3)),
columns['URN_1','URN_2','URN_3'],index=lst)
df['clusterid']=df.groupby(['URN_1','URN_2','URN_3']).ngroup()
print(df)
我想让观测值'a'和'e'具有相同的集群id,但是通过这种方法给它们提供了不同的id
如果您的数据不太长,则此操作有效:
输出:
选项2:因为上述解决方案使用
apply
,这在某些情况下可能并不理想。这里有一个小的数学技巧:我们知道一个组(a,b,c)
是由(a+b+c, a**2+b**2+c**2, abc)
唯一定义的(直到一个置换)。所以我们可以计算这些值并按它们分组:性能:第一种方法需要14秒来处理200万行,而第二种方法不到1秒
您可以使用已排序的3个骨灰盒为每个骨灰盒创建一个字符串。
然后按这个新变量分组,并像以前一样使用ngroup()
输出:
对组合中唯一的类似字符串的对象使用factorize。既然顺序无关紧要,我们就先把它分类合并
输出:
相关问题 更多 >
编程相关推荐