考虑以下DataFrame import org.springframework.core.env.Environment;
public class Example {
private boolean skipNextEvent;
@Autowired
public Example(Environment environment) {
skipNextEvent = environment.acceptsProfiles("test");
}
@EventListener
public void onApplicationEvent(ContextRefreshedEvent event) {
if (skipNextEvent) {
skipNextEvent = false;
return;
}
startWebSocketConnection();
}
// ...
}
:
@ExtendWith(SpringExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest
@ActiveProfiles("test") // set profile "test"
public class WebSocketDataSourceTest {
@Autowired
private Example example;
@Autowired
private WebSocketServer server;
@Test
public void shouldWork() {
// ...
example.onApplicationEvent(null); // trigger manually
// ...
}
}
其中有一列具有df
dtype,而另一列包含Date Kind
2018-09-01 13:15:32 Red
2018-09-02 16:13:26 Blue
2018-09-04 22:10:09 Blue
2018-09-04 09:55:30 Red
... ...
,该列只能假定有限数量的值(在这种情况下为2)。
您必须在其中绘制日期直方图:
如何使用Matplotlib实现这一目标?
我当时想做一个set_index并重新采样如下:
datetime64[ns]
但是我丢失了有关每种项数的信息。我也想将任何缺席的日子保持为零。
任何帮助非常感谢。
答案 0 :(得分:2)
使用groupby
,count
和unstack
调整数据框:
df2 = df.groupby(['Date', 'Kind'])['Kind'].count().unstack('Kind').fillna(0)
接下来,重新采样数据框并求和每一天的计数。这还将添加未在数据框(指定)中的所有缺失日期。然后调整索引以仅保留日期部分。
df2 = df2.resample('D').sum()
df2.index = df2.index.date
现在使用stacked=True
绘制数据框:
df2.plot(kind='bar', stacked=True)
或者,plt.bar()
函数可用于最终绘图:
cols = df['Kind'].unique() # Find all original values in the column
ind = range(len(df2))
p1 = plt.bar(ind, df2[cols[0]])
p2 = plt.bar(ind, df2[cols[1]], bottom=df2[cols[0]])
这里有必要将每个部分的bottom
参数设置为之前所有部分的总和。