在for循环中存储不同长度的序列

Store series with different length in for loop

原df如下:

Hour  Count
0     15
0     0
0     0
0     17
0     18
0     12
1     55
1     0
1     0
1     0
1     53
1     51
...

我每小时循环遍历此 df 并在该小时内删除 Count=0,然后在该小时内绘制 Count 的箱线图。然后我得到了 24 个图表。

我可以在循环时将这 24 个箱线图放在同一张图上吗?例如获得如下所示的输出 df2 并使用 plt.boxplot(df2),但我不确定 Nan 是否会导致错误。

       Hour=0    Hour=1  ...
0      15        55
1      17        53
2      18        51
3      12        Nan

还有一个就是去掉0之后,每个小时Count里面的数据长度是不一样的。如何附加此数据并获得上述 df2?

您可以使用下面的代码获取原始 df:

df = pd.DataFrame({
    'Hour': {0:1, 1:1, 2:1, 3:1, 4:1, 5:1, 6:2, 7:2, 8:2, 9:2, 10:2, 11:2},
    'Count': {0:15, 1:0, 2:0, 3:17, 4:18, 5:12, 6:55, 7:0, 8:0, 9:0, 10:53, 11:51}})

这是制作每小时箱线图的代码:

for i in range(2):
    table1 = df[df['Hour'] == i]
    table2 = table1[table1['large_cnt'] != 0]

    fig = plt.figure(1, figsize=(9, 6))
    plt.boxplot(table2['large_cnt'])
    plt.show()

一个选项是 pivot 过滤后的 DataFrame 并绘制 boxplot:

df.query('Count!=0').assign(i=lambda x: x.groupby('Hour').cumcount()).pivot('i', 'Hour', 'Count').boxplot();