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_cy_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】:

我们可以通过idtransformxy 使用meangroup 数据帧,然后从xy 列中减去变换后的平均值以使每个粒子居中,然后使用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,并计算相对于坐标中心的半径的主要内容,如果未能解决你的问题,请参考以下文章

Groupby并根据Pandas中的多个条件计算计数和均值

在 Pandas GroupBy 数据框中按 ID 计算两个日期之间的行数

使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数

Pandas:将重采样与 groupby 相结合并计算时间差

Pandas、groupby 和其他列中的计数数据

pandas 中是不是有与 .groupby 相对的“ungroup by”操作?