与Pandas Groupby的聚类熵?

问题描述

我试图通过groupby来优化计算熵的方式。

我的数据集看起来像这样,我正在尝试查找每个“ lsoa11cd”区域的熵(代表区域/多边形的英国特定地理空间值)。 k_means_5数据表示k = 5。

    test01[['k_means_5','lsoa11cd']].head(10)
    k_means_5   lsoa11cd
0   1   E01019240
1   1   E01019240
2   1   E01019238
3   1   E01019240
4   1   E01019240
5   1   E01019240
6   1   E01019316
7   1   E01019316
8   1   E01019316
9   1   E01019316

我可以使用此超级傻//(错误的?)行来获取熵,但是我想更有效地执行此操作,因为要花10天的时间对'lsoa11cd'值进行for循环迭代。

len(test01.loc[test01['lsoa11cd'] == 'E01019238']['k_means_5'])
51
test01.loc[test01['lsoa11cd'] == 'E01019238']['k_means_5'].value_counts()
1    40
2     6
0     5
Name: k_means_5,dtype: int64
test01.loc[test01['lsoa11cd'] == 'E01019238']['k_means_5'].value_counts()/len(test01.loc[test01['lsoa11cd'] == 'E01019238']['k_means_5'])
1    0.784314
2    0.117647
0    0.098039
Name: k_means_5,dtype: float64
    
from scipy.stats import entropy
    test01.loc[test01['lsoa11cd'] == 'E01019238','entropy_k_means_5'] = entropy(test01.loc[test01['lsoa11cd'] == 'E01019238']['k_means_5'].value_counts()/len(test01.loc[test01['lsoa11cd'] == 'E01019238']['k_means_5']),base=5)

我尝试了一下,但是最后一步当然不能与Im发送的对象的形状配合使用。有专家建议吗?

g1 = test01.groupby('lsoa11cd')['k_means_5'].transform('count')
0          172
1          172
2           51
3          172
4          172
          ... 
1758295     70
1758296     59
1758297     87
1758298     87
1758299    122
Name: k_means_5,Length: 1758300,dtype: int64

g2 = test01.groupby('lsoa11cd')['k_means_5'].value_counts()
lsoa11cd   k_means_5
E01000001  4                             17
           3                              9
E01000002  3                             24
           4                             22
E01000003  4                             13
                                         ..
W01001956  0                             42
           4                              3
W01001957  3                             23
           4                              9
W01001958  4                              9
Name: k_means_5,Length: 64908,dtype: int64

entropy( g2/g1,base=5) # nop!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)