Python 循环数据帧中的数组并按组打印

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位置数据的数据框,它有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         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打印功能。他们是伟大的,因为他们是-使生活更容易为标准的情节,虽然。谢谢你的提示!我注意到正在发生的事情!再次感谢。