以下是一个解决该问题的代码示例:
import pandas as pd
import numpy as np
# 创建示例数据
data = {'Group': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C'],
'X': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'Y': [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]}
df = pd.DataFrame(data)
# 按组计算连续行之间的距离
df['Distance'] = np.nan
for group in df['Group'].unique():
group_idx = df['Group'] == group
x_diff = np.diff(df.loc[group_idx, 'X']) # 计算X轴的差值
y_diff = np.diff(df.loc[group_idx, 'Y']) # 计算Y轴的差值
distances = np.sqrt(x_diff**2 + y_diff**2) # 计算欧氏距离
df.loc[group_idx, 'Distance'] = np.concatenate(([np.nan], distances))
print(df)
这段代码首先创建了一个包含示例数据的DataFrame df
,其中包含了一个表示组的列Group
,以及两个表示坐标的列X
和Y
。
然后,使用np.diff()
函数计算每个组内连续行之间的差值。在这个示例中,我们计算了X轴和Y轴的差值,并使用欧氏距离公式计算了连续行之间的距离。
最后,将计算得到的距离结果存储在Distance
列中,并打印整个DataFrame。
输出结果如下:
Group X Y Distance
0 A 1 11 NaN
1 A 2 12 1.414214
2 A 3 13 1.414214
3 B 4 14 NaN
4 B 5 15 1.414214
5 B 6 16 1.414214
6 B 7 17 1.414214
7 C 8 18 NaN
8 C 9 19 1.414214
9 C 10 20 1.414214
其中,NaN表示该行与前一行不属于同一组,因此不存在距离。
上一篇:按组计算连续天数
下一篇:按组计算连续重复的次数