复杂函数在Pandas数据帧中的应用

2024-09-30 03:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个线段的df,每个线段由唯一的ididxy坐标标识。在

数据框:

   id       x       y
0   1     0.1     0.2
1   1     0.6     1.2
2   1     2.2     1.6
3   1     2.3     1.9
4   2     0.4     0.9
5   2     0.8     1.5
6   2     1.5     1.7
7   2     1.7     2.3
8   2     1.8     3.0

我想把df中每个段的采样点增加到8个点,并将新的点存储在一个新的df中。在

在上面的数据框中,属于同一个id的点是一个线段,因此在上面的数据框中有两个id为1和2的线段。在

下面的代码显示了单个一个线段的采样点的增加情况,例如上述数据框中id=1的线段

^{pr2}$

但是我想对上面的整个df执行这个操作,并且增加每个线段的采样点。为此,我们可以groupbygroupby([“id”]),然后为每个线段获取new_x和new_y,并将其存储在一个新的_df中,列id、new x、new y

预期的df应该有线段id和新的x列和新的列,如下所示

  id     new_x        new_y
0  1       2.3          1.9
1  1      1.98         1.17
2  1      1.67         0.94
3  1      1.35         1.03
4  1      1.04         1.19 
5  1      0.72         1.25
6  1      0.41         0.99
7  1      0.10         0.20
8  2      val          val
9  2      val          val
#Followed by 6 more rows for id 2 with new_x and new_y

如果有什么不清楚的,请告诉我。在


Tags: 数据代码iddfnewbymore情况
1条回答
网友
1楼 · 发布于 2024-09-30 03:23:28

我认为@cᴏʟᴅsᴘᴇᴅ可以提供更有效的方法,但是你可以试试这个。在

LIST=[]
for name,df2 in df.groupby("id"):
    new_x = np.linspace(df2["x"].max(), df2["x"].min(), 8)
    new_y = interpolate.interp1d(df2["x"], df2["y"], kind='cubic')(new_x)
    New_df = pd.DataFrame({'id':name,'new_x': new_x, 'new_y': new_y})
    LIST.append(New_df)


pd.concat(LIST,axis=0).reset_index(drop=True)


Out[55]: 
    id     new_x     new_y
0    1  2.300000  1.900000
1    1  1.985714  1.170057
2    1  1.671429  0.948328
3    1  1.357143  1.027302
4    1  1.042857  1.199468
5    1  0.728571  1.257314
6    1  0.414286  0.993329
7    1  0.100000  0.200000
8    2  1.800000  3.000000
9    2  1.600000  1.905774
10   2  1.400000  1.582319
11   2  1.200000  1.498203
12   2  1.000000  1.512189
13   2  0.800000  1.500000
14   2  0.600000  1.337362
15   2  0.400000  0.900000

相关问题 更多 >

    热门问题