panda groupby ID,并计算相对于坐标中心的半径
Posted
技术标签:
【中文标题】panda groupby ID,并计算相对于坐标中心的半径【英文标题】:panda groupby ID, and compute radius with respect to the center of the coordinates 【发布时间】:2021-07-16 20:26:21 【问题描述】:我有一个带有id
的熊猫数据框df
,以及粒子组的物理坐标(x, y)
。
我想通过以下步骤使用熊猫数据框:groupby 与id
,计算每个粒子距其中心的距离R=np.sqrt((x-x_c)**2+(y-y_c)**2)
。
x_c
和 y_c
(中心坐标)计算自:
df2=df.groupby('id', as_index=False)['x','y'].mean()
df2.columns=['id', 'x_c', 'y_c']
从此数据框:
id x y
0 33434.0 57580.40 65684.5
1 33434.0 57580.10 65684.8
2 33434.0 57580.20 65684.6
3 33434.0 57580.40 65684.8
... ... ...
817526 5621337.0 37264.00 53945.2
817527 5621337.0 57161.90 65303.3
817528 5621337.0 57287.80 65933.2
817529 5621337.0 58111.30 66987.5
我想获取这个数据框:
id x y R
0 33434.0 57580.40 65684.5 0.21505813
1 33434.0 57580.10 65684.8 0.21505813
2 33434.0 57580.20 65684.6 0.10606601
3 33434.0 57580.40 65684.8 0.17677669
... ... ...
817526 5621337.0 37264.00 53945.2 17707.67
817527 5621337.0 57161.90 65303.3 5220.65
817528 5621337.0 57287.80 65933.2 5630.37
817529 5621337.0 58111.30 66987.5 6895.2
谢谢!
【问题讨论】:
【参考方案1】:我们可以通过id
和transform
列x
和y
使用mean
来group
数据帧,然后从x
和y
列中减去变换后的平均值以使每个粒子居中,然后使用distance
公式计算得到的列R
c = ['x', 'y']
df['R'] = ((df[c] - df.groupby('id')[c].transform('mean')) ** 2).sum(1) ** 0.5
id x y R
0 33434.0 57580.4 65684.5 0.215058
1 33434.0 57580.1 65684.8 0.215058
2 33434.0 57580.2 65684.6 0.106066
3 33434.0 57580.4 65684.8 0.176777
...
817527 5621337.0 57161.9 65303.3 5220.657327
817528 5621337.0 57287.8 65933.2 5630.379935
817529 5621337.0 58111.3 66987.5 6895.229767
【讨论】:
以上是关于panda groupby ID,并计算相对于坐标中心的半径的主要内容,如果未能解决你的问题,请参考以下文章
在 Pandas GroupBy 数据框中按 ID 计算两个日期之间的行数
使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数