迭代Pandas Dataframe 以绘制时间序列间隔

9ceoxa92  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(153)

我有一个包含大量信息的Dataframe,但我想绘制一系列图表(如箱线图和累积密度函数),以六个月为间隔,在几个月内迭代,如:从最早的一个月(一月、二月、三月、四月、五月、六月)开始的前六个月的绘图,然后从第二早的一个月(二月、三月、四月、五月、六月、七月)开始的另一个六个月的绘图,然后(三月、四月、五月、六月、七月、八月)等等。
我尝试了一种可能非常幼稚的方法来迭代循环:

months = df_filt['time'].unique()

其输出如下:

然后道:

j = 0
k = 0

while j < len(months) - 5:
    while k < 6:
        dff = df_filt.loc[df_filt['time'] == months[k]]
        dff = pd.concat(dff)
        k += 1

    sns.histplot(data=df_filt,
                 x='hrs_prev',
                 hue='Faltou',
                 bins=len(df_filt),
                 stat="density",
                 element="step",
                 fill=False,
                 cumulative=True,
                 common_norm=False)
    plt.title("Cumulative distribution function")
    plt.show()

    k = 0

这显然是错误的,因为当k=0在循环结束时,我会一遍又一遍地绘制相同的东西。我可以将while k < 6改为另一个东西,因为循环总是完成工作,但它们从来不是完成工作的最佳方式......
我可以尝试如下方法:.... k = k-5
这个方法是可行的,因为在循环结束时,j会以正确的方式递增,看起来是可行的,但是我听说Pandas有一个内置的函数,它可以处理时间序列的滞后,或者叫做ThreadPoolExecutor,但是我似乎没有找到能帮我的例子。
所以,我的问题是:
有没有什么最佳的方法来处理时间序列,并且可以按照我需要的方式绘制数据间隔?ThreadPoolExecutor是正确的方法吗?或者我必须手工完成?
任何帮助都将是巨大的感谢,并将真正保存我一个巨大的时间

6jjcrrmo

6jjcrrmo1#

我试过这个,它不是最好的解决方案,但效果很好:

months = df_filt['time'].unique()

j = 0
k = 0
df_plot = pd.DataFrame()

while j < len(months) - 5:
    while k < j+6:
    dff = df_filt.loc[df_filt['time'] == months[k]]
    df_plot = pd.concat([df_plot, dff])
    k += 1

print(df_plot)
print(df_plot['time'].value_counts())
df_plot = pd.DataFrame()
print(k)
print(j)
k -= 5
j += 1

我想要一些更优雅和最优的东西,因为我不喜欢循环。但它做了一段时间的工作。

相关问题