我有一个gps点的数据框df。我有划分为网格的地理区域。每个网格单元由数据框中的两列(行,列)对表示。 GPS点标有其运输方式。我想通过其运输方式来计算每个网格单元的概率分布。 (有五种交通工具,即步行,自行车,汽车,火车,地铁)。
Row Col P(Walk) P(Bike) P(Car) P(Train) P(Subway)
8 8 Freq(walk)/n Freq(bike)/n Freq(car)/n Freq(train)/n Freq(subway)/n
8 9 Freq(walk)/n Freq(bike)/n Freq(car)/n Freq(train)/n Freq(subway)/n
8 10 Freq(walk)/n Freq(bike)/n Freq(car)/n Freq(train)/n Freq(subway)/n
例如,第8行的网格单元格,第8列包含638 gps点。 598个步行点和40个地铁点,则此特定网格单元的每种运输方式的概率变为
Row Col P(Walk) P(Bike) P(Car) P(Train) P(Subway)
8 8 598/638 0/638 0/638 0/638 40/638
8 9 ... ... ... ... ...
8 10 ... ... ... ... ...
... ... ... ... ... ... ...
'''
grp = df.groupby(['row','col','Transportation_Mode'])
一种方法是使用for循环逐个循环遍历每个组,以获取每种运输方式的频率。但是我认为他们应该更轻松或更轻松的方式,或者可以在几行中解决此问题的库。
为更好地理解将每个地理区域划分为由行和列表示的网格单元的问题,附加了地理区域的图像。每个网格单元都包含多个标有其运输方式的gps点。
在给定的链接中可以使用dataframe的csv文件,以使数据更加清晰。 https://drive.google.com/open?id=1R_BBL00G_Dlo-6yrovYJp5zEYLwlMPi9
答案 0 :(得分:1)
如果我没记错的话,您正在寻找一种更优雅的方法来遍历每个组对象并为每个对象生成二维概率分布?
听起来您应该研究this pandas documentation(更具体地说是apply
函数)。
您可以简单地将可视化应用于每个组,例如SNS KDE visualization,然后将各个图重新加入到您提供的网格中。借助一点ax
魔术,您可以为每种运输类型构造一个网格。我认为这些是手边最好的工具。我会把逻辑留给你。