处理包含段(有两个端点)的数据框,我必须找到每个段的中点,最后插入在df中的一行,中间点坐标在两者之间终点行。
以下是df:
id x y
0 1 0.8000 1.90
1 1 0.8833 2.00
2 2 1.0000 2.14
3 2 1.3000 2.50
具有相同 id 的点是同一段的终点。
创建了以下简单的函数(基本上是计算均值):
def find_mpt(x1, y1, x2, y2):
x, y = ( x1 + x2) / 2 , (y1 + y2) / 2
return x, y
想要将func应用于整个df,并且专门在结束点行之间插入结果行,如下所示:
id x y
0 1 0.8000 1.90
1 1 0.8416 1.95 #new row
2 1 0.8833 2.00
3 2 1.0000 2.14
4 2 1.1500 2.32 #new row
5 2 1.3000 2.50
也许我可以使用df.groupby(['id'])然后应用该函数,但仍然不知道如何在这些特定位置插入行。
答案 0 :(得分:1)
可以指定聚合方法。根据定义的函数,我认为你想要将d和x的平均值加到你的df中。由于只涉及两个端点,因此简化了程序。
df2 = df.groupby('id').agg('mean').reset_index()
df_final = pd.concat((df, df2)).sort_values(['id', 'y']).reset_index(drop=True)
print(df_final)
id x y
0 1 0.80000 1.90
1 1 0.84165 1.95
2 1 0.88330 2.00
3 2 1.00000 2.14
4 2 1.15000 2.32
5 2 1.30000 2.50
是的,这也可以通过单线实现。
答案 1 :(得分:0)
这是通过自我功能计算的,
def find_mpt(x):
ret = np.mean(x)
return ret
pd.concat([df2,df2.groupby('id',as_index=False).apply(lambda x:find_mpt(x))],axis=0).sort_values(['id','y'])
Out[26]:
id x y
0 1.0 0.80000 1.90
0 1.0 0.84165 1.95
1 1.0 0.88330 2.00
2 2.0 1.00000 2.14
1 2.0 1.15000 2.32
3 2.0 1.30000 2.50