我有一个点CSV文件,其中包含纬度,经度和高度信息。 如下面的输出代码所示,其中height的计数值为1、2、3、4和5。
df= pd.read_csv("point_25.csv")
df1 = df.groupby(["latitude", "longitude"])["heights"].count()
df1.unique()
# array([2, 1, 3, 5, 4], dtype=int64)
df1
# output
latitude longitude
38.6287 -118.7425 1
38.6289 -118.7426 2
38.6290 -118.7426 1
38.6291 -118.7426 2
38.6292 -118.7426 2
38.6293 -118.7426 1
..
38.6294 -118.7426 3
38.6295 -118.7427 5
38.6296 -118.7427 3
38.6297 -118.7427 2
38.6298 -118.7427 3
38.6300 -118.7427 2
Name: heights, Length: 370, dtype: int64
如果计数值大于1,则取所有高度的平均值,并为一个特定的经度和纬度组提供一个高度值作为输出,以使每个纬度和经度的计数为1。
答案 0 :(得分:2)
您可以这样操作agg
和query
:
df1 = (df.groupby(["latitude", "longitude"])["heights"]
.agg(['count','mean'])
.query('count > 1')
)
答案 1 :(得分:1)
如果我正确地阅读了“我想要什么”部分,我认为使用query
是不合适的。仍然需要返回只有一个计数的行以及具有多个高度的行的平均值。
要实现此目的,应执行以下操作。
df1 = df.groupby(['latitude', 'longitude'])['heights'].mean()