问题描述
我试图通过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 (将#修改为@)