在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();
原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();