Python 循环数据帧中的数组并按组打印
我有一个包含X&Y位置数据的数据框,它有3个分组变量:Python 循环数据帧中的数组并按组打印,python,pandas,dataframe,numpy,matplotlib,Python,Pandas,Dataframe,Numpy,Matplotlib,我有一个包含X&Y位置数据的数据框,它有3个分组变量: OBS场景(0、1或2) startPos(1或2) targetPos(1、2或3) 因此,这些分组变量有18种组合:3x2x3 每个参与者的X和Y数据长度约为300-500个数据点(各不相同) 数据帧如下所示: X Y participantNum obsScenario startPos targetPos 0 -16.000000 5.000000 6432
X Y participantNum obsScenario startPos targetPos
0 -16.000000 5.000000 6432024 0 1 1
1 -16.000000 5.000000 6432024 0 1 1
2 -15.833450 5.000000 6432024 0 1 1
3 -15.667200 5.000000 6432024 0 1 1
4 -15.500100 5.000000 6432024 0 1 1
... ... ... ... ... ...
2185 -1.572058 -3.982638 7830381 2 2 2
2186 -1.406996 -3.958967 7830381 2 2 2
2187 -1.242231 -3.935339 7830381 2 2 2
2188 -1.077516 -3.911718 7830381 2 2 2
2189 -0.912604 -3.888069 7830381 2 2 2
我需要分别绘制这18种组合的X,Y数据
我尝试使用类似的方法,但这只是在同一个图上绘制所有XY轨迹:
for aid, grp in df.groupby(['obsScenario', 'startPos', 'targetPos']):
plt.plot(grp[0].values, grp[1].values)
plt.show()
使用这样的方法不会考虑分组变量的不同组合:
fig, axs = plt.subplots(nrows=3, ncols=6)
for ax in axs.flat:
plotxy(ax,x,y)
这正是我想要的:
fig, axs = plt.subplots(6,3)
grp = df.groupby(['obsScenario', 'startPos', 'targetPos'])
for (name, df), ax in zip(grp, axs.flat):
df.plot(x='X',y='Y', ax=ax)
如果将
plt.show()
放入循环中,则将获得每行的绘图。否则使用子图这能回答你的问题吗?不,因为它没有考虑分组变量的不同组合。我不想绘制每一行,因为这将输出数千个绘图,我需要将XY轨迹分成18个不同组合的分组变量。我的完整数据集实际上总共有106个组合。也许这会有所帮助:你们太接近了。您只需将这两种策略结合起来—定义子地块的数量,按变量分组,用groupby变量压缩ax对象,然后用ax.plot(grp[0].values,grp[1].values)打印到不同的子地块。
Yup,这就是我的意思。但是,从长远来看,最好使用ax.plot(gf.X,gf.Y)
进行打印(不要重用df-它将覆盖原始df)。原因是pandas和matplotlib在轴处理上有时会发生冲突-因此,如果需要matplotlib的其他功能,最好不要使用pandas打印功能。他们是伟大的,因为他们是-使生活更容易为标准的情节,虽然。谢谢你的提示!我注意到正在发生的事情!再次感谢。