如何解决熊猫如何在没有分类值范围的情况下进行 bin 和 groupby
我有大量的纬度和经度值,我想将它们合并在一起以便在热图上显示它们(ipyleaflet
似乎只允许热图中 2000 个左右的点,这也将是使用大数据时效率更高)。
我实际上使用的是 vaex
,但是 pandas
方面的答案也很好。
pandas
pd.cut
函数在分箱方面似乎很有帮助,但是它会生成一个分类列 (category
dtype
),看起来像所有箱中的值。是否有某种方法可以将其更改为仅标识每个垃圾箱的增量数字(感谢 jezreal 提供的那部分答案)?我只需要一个 bin 编号,然后 groupby
纬度和经度列上的 bin 编号和平均值 (mean
)。我还需要计算热图条目的强度。
例如:
dft = pd.DataFrame({
'latitude': [1.5,0.5,1.2,0.9,3],'longitude': [3,0.2,2,1.1]
})
dft['bin'] = pd.cut(dft['latitude'],bins=3,labels=False).astype(str) + "_" + pd.cut(dft['longitude'],labels=False).astype(str)
dft.groupby('bin').agg(['mean','count']).unstack()
Almost gives me the answer,but I think I want this output instead:
bin latitude_mean longitude_mean count
0_0 0.7 0.2 2
0_1 1.2 2.0 1
1_2 1.5 3.0 1
2_0 3.0 1.1 1
如果计数可以在 1 到 1000 之间归一化会很有帮助。
如何使用 pandas
pd.cut
或其他东西来groupby
行中的 bin、纬度和经度的平均值以及列中的(热图强度)计数?
解决方法
pandas pd.cut 函数似乎在分箱方面很有帮助,但是它会生成一个分类列(类别 dtype),它看起来像一个 bin 中所有值的列表。是否有某种方法可以将其更改为标识每个垃圾箱的增量数字
是的,在 cut
中使用 label=False
参数:
labels 数组或 False,默认无
指定返回的 bin 的标签。必须与生成的 bin 长度相同。如果为 False,则仅返回 bin 的整数指示符。
最后使用 GroupBy.agg
进行聚合并最后标准化 count
列:
df = dft.groupby('bin').agg(latitude_mean=('latitude','mean'),longitude_mean=('longitude',count=('latitude','count'))
#https://stackoverflow.com/a/50028155/2901002
a,b = 1,1000
x,y = df['count'].min(),df['count'].max()
df['count'] = (df['count'] - x) / (y - x) * (b - a) + a
print (df)
latitude_mean longitude_mean count
bin
0_0 0.7 0.2 1000.0
0_1 1.2 2.0 1.0
1_2 1.5 3.0 1.0
2_0 3.0 1.1 1.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。