【问题标题】:loop through two dataframes and plot by column in loop循环遍历两个数据框并在循环中按列绘制
【发布时间】:2021-07-16 01:22:56
【问题描述】:

我有 2 个具有相同列名、索引和大小的数据框。我想创建一个数据框列与另一个具有相同标题的散点图。当我尝试下面的代码时,只有 sim.columns 循环,而 obs.columns 仅绘制第一列并且不循环。所以我得到的是每个 sim.columns 仅针对第一个 obs.column 的散点图。我不确定这个循环出了什么问题。感谢您的帮助!

    obs= pd.read_csv(obsFile)
    obs.rename(columns={obs.columns[0]: "SP" }, inplace = True)
    sim= pd.read_csv(simFile)
    sim.rename(columns={sim.columns[0]: "SP" }, inplace = True)
    
sim = sim.set_index("SP")
obs = obs.set_index("SP")

for colsim in sim.columns:
    for colobs in obs.columns:
        axes = plt.gca()
        axes.set_xlim([1,630])
        plt.scatter(sim.index, sim[colsim])
        plt.scatter(obs.index, obs[colobs])

        plt.xlabel('Stress Period')
        plt.ylabel('groundwater elevation(m)')
        plt.title(str(colsim))
        plt.savefig(os.path.join(outFold, str(colsim)+'.pdf')) 
        plt.close()
        break

【问题讨论】:

    标签: python pandas dataframe loops plot


    【解决方案1】:

    而不是双 for 循环:

    for colsim in sim.columns:
        for colobs in obs.columns:
            ...
    

    只需使用zip

    for colsim, colobs in zip(sim.columns, obs.columns):
        ...
    

    不确定您想要做什么,但如果此代码不起作用,请尝试删除 break 然后它应该可以工作,但如果它在没有删除中断的情况下工作,请保留它。

    【讨论】:

    • zip 不同于双循环~
    【解决方案2】:

    你不应该在这里使用嵌套循环,它不是你想要实现的。相反,您希望在一个循环中同时遍历两个数据帧。我可以想到两种方法来实现这一点:

    1. 合并数据帧并在一个循环中循环通过合并的数据帧
    2. 引入一个计数器变量,该变量可用作并行循环两个数据帧的索引

    【讨论】:

    • 只使用zip 就足够了......就像我的回答一样
    • 你是对的,我用错了术语。合并我的意思是压缩。
    猜你喜欢
    • 2018-03-16
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2017-01-15
    • 2017-10-02
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多